Если вы удалите ports:
, контейнер будет недоступен извне его указанной c Docker сети. Если вы используете одну очень конкретную c конфигурацию, в которой хост может напрямую связываться с Docker -приватными IP-адресами, вы не можете предотвратить это. (Поскольку это работает только в одной очень специфической c конфигурации, обычно их нецелесообразно указывать.)
Поэтому, если у вас есть Dockerfile:
version: "3"
services:
apache:
build: ./bin/apache
restart: always
ports:
- "80:80"
mysql:
build: ./bin/mysql
restart: always
# no ports:
environment: { as: above }
volumes:
- sql:/var/lib/mysql
volumes:
sql:
Контейнер apache
может подключаться к mysql:3306
(без директивы expose:
или ports:
). Хост-система может подключиться к http://localhost:80
для доступа к контейнеру apache
, но не может напрямую подключиться к контейнеру mysql
(если только это не хост-Linux, и вы не ищите IP-адрес вручную, не рекомендуется) , Сеть в Compose содержит дополнительную информацию о среде контейнерной сети.