Типичные контейнеры Docker запускают долго работающий сервер, прослушивающий некоторый порт TCP.Другие контейнеры в той же сети Docker могут получить доступ к этому контейнеру, используя имя контейнера (директива docker run --name
, container_name:
) в качестве имени DNS и порт, на котором работает сервер.В Docker Compose Compose создает сеть Docker для каждого файла Compose YAML, а также делает службы доступными под их ключом в файле YAML.Это работает, даже если ports:
не указано.
Так, например, если ваш docker-compose.yml
файл говорит
services:
mongo:
image: mongo
others:
env:
MONGODB_HOST: mongo
MONGODB_PORT: 27017
, тогда контейнер MongoDB будет доступен для этого имени хоста и(по умолчанию) порт, даже если он явно не имеет ports:
.
Если вы объявите ports:
, тогда контейнер будет доступен из-за пределов пространства Docker.Если у вас только один порт, это номер порта сервера, и Docker выбирает порт хоста;в большинстве случаев это бесполезно (но гарантированно не столкнется с конфликтом портов).Если у вас есть два порта, это порт хоста и внутренний сервисный порт.Вы также можете указать IP-адрес хоста для bind (2) с.
Наличие или отсутствие ports:
не влияет на связь между донорами.Всегда используйте имя контейнера (или Docker-compose.yml
имя службы) и «внутренний» номер порта, который прослушивает сервер.