В Docker Compose существует несколько способов прокинуть порты для контейнеров.
1. Наиболее распространенный способ - это использование директивы ports
в файле docker-compose.yml. Директива ports
предназначена для прокидывания портов из контейнеров в хост-систему. Например, если ваш контейнер прослушивает порт 8080, вы можете прокинуть его на порт 8080 хост-системы, указав следующую строку:
version: '3' services: app: image: myapp:latest ports: - 8080:8080
В этом примере контейнер будет доступен по адресу http://localhost:8080
.
Также можно указать только порт хост-системы, а порт контейнера автоматически выберется случайным образом:
version: '3' services: app: image: myapp:latest ports: - 8080
Docker автоматически прокинет порт контейнера на случайно выбранный доступный порт хост-системы.
2. В дополнении к использованию директивы ports
, Docker Compose также поддерживает директиву expose
. Она позволяет контейнерам взаимодействовать друг с другом без явного отображения портов на хост-системе. Порты, указанные в директиве expose
, доступны только внутри сети, созданной Docker Compose, и не видны извне. Например:
version: '3' services: app: image: myapp:latest expose: - 8080
В этом примере порт 8080 будет доступен для других контейнеров внутри сети, но не будет доступен напрямую извне.
3. Если вам нужно пробросить порт только между контейнерами, и не нужно прокидывать его на хост-систему, вы можете использовать внутренние сети Docker Compose. В этом случае порт будет доступен только внутри сети и не будет прокинут на хост-систему. Например:
version: '3' services: app1: image: myapp1:latest networks: - mynetwork expose: - 8080 app2: image: myapp2:latest networks: - mynetwork networks: mynetwork:
В этом примере оба контейнера будут доступны в рамках сети mynetwork
. Контейнер app2
сможет обращаться к контейнеру app1
по адресу app1:8080
, но этот порт не будет доступен с хост-системы.
Надеюсь, эта информация поможет вам успешно прокинуть порты в Docker Compose.