docker разделяет сеть с контейнерами windows и linux
Я хотел бы соединить окна и контейнер 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?
Ответы
Переключение опции «Переключиться на контейнеры Linux» заставляет ваш Docker переключать контексты между виртуальной машиной Linux, на которой работает Docker, и операционной системой Windows.
Когда вы это делаете, вы фактически переключаетесь на другой набор ресурсов докеров, которые не знают друг друга. Они работают в разных операционных системах. К сожалению, вы не можете делать то, что пытаетесь сделать с помощью compose, поскольку compose всегда будет запускаться на одном Daemon, а один Daemon работает в одной операционной системе. Но вы можете настроить собственную виртуальную машину Linux, установить на нее докер и создать рой из 2 узлов, состоящий из вашей машины с Windows и вашей виртуальной машины Linux. Таким образом, вы можете запускать свои контейнеры Linux на одном, а контейнеры Windows - на другом и соединять их через сеть.