docker compartilha rede com contêineres windows e linux
Gostaria de conectar um container windows e um linux dentro da mesma rede.
Primeiro, crio uma rede (o Docker para Windows está definido como "Windows Containers"):
docker network create --driver nat mynet
A rede é criada e docker network ls
lista a nova rede.
docker-compose.yml do windows e do serviço linux contém:
version: "3"
services:
...
networks:
mynet: {}
networks:
mynet:
external: true
Com docker-compose up
o contêiner do Windows inicia bem, após "Switch to Linux Containers" e tentando iniciar o contêiner do Linux, o seguinte erro é mostrado:
ERRO: Rede mynet declarada como externa, mas não foi encontrada. Crie a rede manualmente usando
docker network create mynet
e tente novamente.
Também docker network ls
não lista mais a rede.
Qual seria a maneira correta de compartilhar uma rede entre windows e linux?
Respostas
Alternar a opção 'Alternar para contêineres do Linux "faz com que seu Docker alterne contextos entre um linux vm que o Docker executa e um sistema operacional Windows.
Ao fazer isso, você está efetivamente mudando para um conjunto diferente de recursos do docker que não estão cientes uns dos outros. Eles estão em sistemas operacionais separados. Infelizmente, você não pode fazer o que está tentando fazer com o compose, já que o compose sempre será executado em um único Daemon, e um único Daemon é executado em um único sistema operacional. Mas você pode configurar um linux vm por conta própria, instalar o docker nele e fazer um enxame de 2 nós consistindo em sua máquina Windows e sua VM linux. Dessa forma, você pode executar seus contêineres Linux em um, seus contêineres do Windows no outro e conectá-los por meio de uma rede.