Roteamento entre diferentes redes docker na mesma máquina host

2

Eu criei duas redes docker.

docker network create --subnet=172.18.0.0/16 Docker_network_1
docker network create --subnet=172.19.0.0/16 Docker_network_2

Em cada um deles, eu corro dois contêineres diferentes:

docker run --rm -it --name Container_1 --net Docker_network_1  alpine /bin/sh
docker run --rm -it --name Container_2 --net Docker_network_2  alpine /bin/sh

O Container_1 tem o IP 172.18.0.2 , enquanto o Container_2 tem o IP 172.19.0.2 .

Do Container_1, posso ping da interface do docker IP 172.19.0.1 , que pertence a Docker_network_2 , mas não consigo pingar Container_2 IP 172.19.0.2 .

Não entendo por que, como "roteamento" na minha máquina host parece correto:

#route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    1024   0        0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
172.18.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-ea28cf2d7108
172.19.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-244606ad6705
    
por user 02.02.2017 / 14:40

2 respostas

2

Eu resolvi o problema removendo DOCKER-ISOLATION chain que o Docker define no iptables:

# iptables --flush DOCKER-ISOLATION

Não tenho certeza se essa é uma abordagem correta do ponto de vista da segurança, mas faz o que eu preciso.

    
por 03.02.2017 / 17:21
1

As redes Docker não são projetadas para rotear entre si, elas são intencionalmente isoladas para que você possa criar grupos de aplicativos que só podem se comunicar entre si. Eu suspeito que isso seja executado nas regras do iptables, mas não me cite sobre isso.

Você pode, no entanto, adicionar um contêiner a várias redes. Manualmente isso é feito com um comando docker network connect Docker_network_2 Container_1 após a criação do contêiner (você pode dividir o comando de execução em um comando create e start se precisar conectar-se à rede antes de iniciar seu ponto de entrada).

O Docker compor é útil para conectar vários contêineres em várias redes. Ele permite que você defina cada uma das redes às quais cada container pertence, eliminando a necessidade de executar vários comandos docker network connect .

    
por 02.02.2017 / 23:20