Crossposting aqui, já que essa questão foi marcada como fora do tópico no SO.
Eu vi algumas perguntas sobre como anexar contêineres do Docker a uma rede física usando o macvlan , mas ainda para encontrar uma resposta para o meu cenário atual.
O que estou tentando realizar:
- Execute contêineres do Docker dentro de uma VM do VirtualBox executando o Ubuntu.
- Usando o macvlan, conecte os contêineres à mesma rede de estivadores e atribua a cada um deles um endereço IP na sub-rede da minha rede física.
- Acesse cada contêiner por meio desse endereço IP atribuído do host ou de qualquer outro dispositivo conectado à rede.
Até agora, fiz o seguinte:
- Criei minha VM usando o Vagrant.
- Adicionada minha interface Wi-Fi como um adaptador em ponte para a VM.
- Defina o gateway padrão associado para a VM conforme descrito aqui ao IP do meu roteador (192.168.1.1).
- Crie a rede do Docker com o seguinte comando:
docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 --ip-range=192.168.1.160/27 -o parent=eth1 test_net
- Executar meus contêineres, anexando-os à rede descrita acima.
Eu posso verificar se os dois contêineres estão ativos e são designados como 192.168.1.160 e 192.168.1.161. Obviamente, devido à maneira como o macvlan funciona, esses endereços não podem ser acessados na VM.
Mas, quando tento fazer o ping de um desses endereços da minha máquina host, a solicitação expira. No entanto, depois de tentar executar ping nesses endereços, quando executo um arp -a no host, posso ver entradas para ambos os contêineres:
? (192.168.1.160) at 2:42:c0:a8:1:a0 on en0 ifscope [ethernet]
? (192.168.1.161) at 2:42:c0:a8:1:a1 on en0 ifscope [ethernet]
Verifiquei se o firewall do meu roteador estava desativado, os endereços IP acima não estão em conflito com nenhum outro dispositivo da minha rede, que posso executar ping da minha VM no meu host e que o gateway padrão da minha VM está correto definido para 192.168.1.1 na interface eth1. Além disso, verifiquei se a sub-rede no comando create da rede docker corresponde à sub-rede configurada do roteador.
Já vi soluções que aproveitam o -p
do Docker, mas isso não é uma opção para mim, já que preciso me referir a cada contêiner apenas por seu endereço IP.
Alguém teve algum sucesso em realizar o que estou tentando fazer? Além disso, por que os dois contêineres teriam entradas ARP, mas não seriam acessíveis, e o que eu poderia fazer para corrigir isso? Ou, há algo relevante em como o VirtualBox lida com adaptadores em ponte?
Eu pensei em editar iptables
na VM para definir a política FORWARD
padrão como ACCEPT
, mas isso também não funcionou. Como parece que o ARP funciona, acredito que os pacotes estejam sendo descartados pela VM antes que eles possam retornar ao host, mas não tenho certeza do que alterar para corrigir isso.