docker разделяет сеть с контейнерами windows и linux

Aug 17 2020

Я хотел бы соединить окна и контейнер linux в одной сети.

Сначала я создаю сеть (Docker для Windows настроен на «Контейнеры Windows»):

docker network create --driver nat mynet

Сеть будет создана и docker network lsотобразит новую сеть.

docker-compose.yml окон и службы Linux содержат:

version: "3"
services:
  ...
    networks:
      mynet: {}
networks:
  mynet:
    external: true

Когда docker-compose upконтейнер Windows запускается нормально, после «Переключиться на контейнеры Linux» и попытки запустить контейнер linux отображается следующая ошибка:

ОШИБКА: сеть mynet объявлена ​​внешней, но не может быть найдена. Создайте сеть вручную с помощью docker network create mynetи попробуйте еще раз.

Также docker network lsбольше не перечисляет сеть.

Каким будет правильный способ совместного использования сети между Windows и Linux?

Ответы

1 CharlesDesbiens Aug 17 2020 at 08:18

Переключение опции «Переключиться на контейнеры Linux» заставляет ваш Docker переключать контексты между виртуальной машиной Linux, на которой работает Docker, и операционной системой Windows.

Когда вы это делаете, вы фактически переключаетесь на другой набор ресурсов докеров, которые не знают друг друга. Они работают в разных операционных системах. К сожалению, вы не можете делать то, что пытаетесь сделать с помощью compose, поскольку compose всегда будет запускаться на одном Daemon, а один Daemon работает в одной операционной системе. Но вы можете настроить собственную виртуальную машину Linux, установить на нее докер и создать рой из 2 узлов, состоящий из вашей машины с Windows и вашей виртуальной машины Linux. Таким образом, вы можете запускать свои контейнеры Linux на одном, а контейнеры Windows - на другом и соединять их через сеть.