Temos um problema que o nosso servidor que hospeda nossos contêineres não consegue acessá-los com seu IP, enquanto outros computadores na rede podem. Nós temos a seguinte configuração para a nossa LAN:
Nossa rede é assim, super simples:
|---------| |---------| |---------|
| Docker |-----------| Router |-----------| Other computers/
| Host |-----------| | | NAS/etc |
|---------| |---------| |---------|
Para expor nossos contêineres à nossa rede, seguimos a seguinte resposta: link
Ou seja. os comandos que usamos são estes:
docker network create \
--subnet 192.168.0.0/16 \
--aux-address "DefaultGatewayIPv4=192.168.0.1" \
--gateway=192.168.1.1 \
-o com.docker.network.bridge.name=br-internal_lan internal_lan
sudo brctl addif br-internal_lan eno1
sudo ip a del 192.168.1.1/16 dev br-internal_lan
Até aí tudo bem. Nosso servidor tem o IP 192.168.0.3 em eno3
, que é o que queremos. eno1
é conectado por um cabo separado ao roteador e é usado para a ponte. A ponte obtém o IP 192.168.0.83. Se então começarmos o nosso container com:
docker run --net=internal_lan -d --ip 192.168.1.0 serverimage:latest
Obtemos o seguinte cenário:
docker exec container01 /bin/bash
para acessar os contêineres Estas são algumas configurações de amostra do nosso servidor:
ifconfig
br-internal_lan: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.83 netmask 255.255.0.0 broadcast 192.168.255.255
inet6 fe80::42:8cff:fe30:3b4a prefixlen 64 scopeid 0x20<link>
ether 02:42:8c:30:3b:4a txqueuelen 0 (Ethernet)
RX packets 430214 bytes 62591783 (59.6 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 4244 bytes 546612 (533.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::225:90ff:fe5d:6b80 prefixlen 64 scopeid 0x20<link>
ether 00:25:90:5d:6b:80 txqueuelen 1000 (Ethernet)
RX packets 829691 bytes 296523943 (282.7 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 78684 bytes 87560787 (83.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device memory 0xdf400000-df47ffff
eno3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.3 netmask 255.255.0.0 broadcast 192.168.255.255
inet6 fe80::225:90ff:fe5d:6b82 prefixlen 64 scopeid 0x20<link>
ether 00:25:90:5d:6b:82 txqueuelen 1000 (Ethernet)
RX packets 1744808 bytes 1583970565 (1.4 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1019186 bytes 1085667196 (1.0 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device memory 0xdf200000-df27ffff
<other interfaces omitted>
rota
default router.asus.com 0.0.0.0 UG 1024 0 0 eno3
default router.asus.com 0.0.0.0 UG 1024 0 0 br-internal_lan
172.17.0.0 * 255.255.0.0 U 0 0 0 docker0
192.168.0.0 * 255.255.0.0 U 0 0 0 eno3
192.168.0.0 * 255.255.0.0 U 0 0 0 br-internal_lan
router.asus.com * 255.255.255.255 UH 1024 0 0 eno3
router.asus.com * 255.255.255.255 UH 1024 0 0 br-internal_lan
Nós tentamos alterar /proc/sys/net/ipv4/[eno1,eno3,br-internal_lan]/rp_filter
para 2, mas isso não mudou nada (não sei se deveria). /proc/sys/net/ipv4/ip_forward
está definido como 1.
O que poderia estar errado com nossa configuração? Como podemos obter acesso por IP aos nossos contêineres? Qualquer ajuda é apreciada, se eu precisar fornecer informações adicionais, por favor, avise-nos.
(Observe que atualmente estamos executando o Docker 1.10.3 (que é a versão mais recente do Docker ao usar o CoreOS estável), portanto, o macvlan não é uma opção para nós.)