абсолютно ничего не делать; удалить все объявления networks:
. Это будет работать, как вы описали.
Контейнеры не имеют "publi c IPs"; вы не можете добраться до контейнера снаружи Docker, если не опубликовали ports:
. (То, что у контейнера вообще есть IP-адрес, является чем-то вроде детали реализации, и они доступны только снаружи Docker на хостах native- Linux, а затем только с одного хоста; вам почти никогда не нужно смотреть напрямую или используйте эти адреса.)
При стандартной настройке Docker контейнеры могут устанавливать исходящие соединения очень хорошо. Вам не нужно ничего настраивать для этого.
Пока две службы Compose находятся в одной сети (включая автоматическую c неявную default
сеть), они могут связываться друг с другом с помощью службы Compose имена как имена хостов.
Так что если мы переписываем ваш docker-compose.yml
файл как:
version: "3"
services:
serviceB:
build: ./serviceB
ports: ['3333:3000']
serviceA:
build: ./serviceA
Тогда:
- Служба A не может быть достигнута из снаружи Docker пространство; сервис B может быть доступен через порт 3333 на IP-адресе хоста
- Сервис B может использовать
serviceA
в качестве имени хоста для доступа к сервису A (и наоборот ) - Обе службы A и B могут вызывать публичные c Inte rnet, другие системы в вашей локальной сети, et c.
Сеть в Compose имеет некоторую официальную документацию о том, как все работает.