Можно ли использовать как сеть по умолчанию, так и внешнюю внешнюю в docker -compose? - PullRequest
1 голос
/ 24 апреля 2020

У меня есть два services:

  • сервис A: Это как сервис базы данных

  • сервис B: Это как сервис бэкэнда

Я хочу, чтобы служба B могла запрашивать внешний мир (например, curl google.com), а также подключаться к службе A, используя псевдоним (или что-то еще). Потому что я не хочу публиковать c ip службы А снаружи. Это возможно?

docker-compose.yml похоже на это:

version: "3"

services:
  serviceB:
    build: ./serviceB
    networks:
      - outside
      - default
  serviceA:
    build: ./serviceA
    networks:
      - default

networks:
  outside:
    external: true

1 Ответ

1 голос
/ 24 апреля 2020

абсолютно ничего не делать; удалить все объявления 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 имеет некоторую официальную документацию о том, как все работает.

...