Docker Compose использует как хост-сеть, так и мостовую сеть.

У меня есть 2 изображения, с которыми я хочу общаться друг с другом через мостовую сеть compose по умолчанию, но я также хочу, чтобы они имели доступ к моей хост-сети.

Чтобы разрешить изображениям общаться друг с другом в сети моста compose по умолчанию, мне не нужно ничего делать:

version: '3.4'
services: 
  hello:
   image: hello-world

  world:
    image: hello-world

С приведенной выше спецификацией служба hello может ссылаться на службу world, используя DNS-имя world.

Если бы я хотел, чтобы служба приветствия могла взаимодействовать с сетью моей хост-машины, я мог бы добавить network_mode: host в спецификацию.

version: '3.4'
services: 
  hello:
   image: hello-world
   network_mode: host
  world:
    image: hello-world

Это позволяет службе hello получить доступ к сети моего хост-компьютера, но больше не может получить доступ к world через встроенный DNS компоновщика. Как я могу выполнить оба?

Я пытался создать пользовательскую сеть, но пользовательские сети не могут использовать драйвер хоста, и я не могу использовать network_mode в сочетании с networks:

Это не работает:

version: '3.4'
services: 
  hello:
   image: hello-world
   network_mode: host
   networks:
   - bridge
  world:
    image: hello-world
    networks:
    - bridge

networks:
  test:
    driver: bridge
$ docker-compose up
ERROR: 'network_mode' and 'networks' cannot be combined

person Connor Graham    schedule 02.04.2020    source источник


Ответы (1)


Если они оба находятся в вашей хост-сети, они могут общаться друг с другом так же, как обычные приложения общаются друг с другом: через локальный хост. Так что мост вообще не нужен.

person Itamar Turner-Trauring    schedule 02.04.2020