AVISO: HACKS ADIANTE!
Rede (hoje) é um pouco estranha dentro do Docker, então precisamos compensar muitas das suposições feitas em nome dos usuários. Para fazer isso, você precisa criar uma interface de ponte para que as interfaces realmente se assentarem e, em seguida, passar a configuração via --lxc-conf
options de maneira semelhante a esta resposta.
Como exemplo (Advertências, isso provavelmente não será diretamente copiável / pastável. Estou regurgitando isso da memória):
Primeiro, configuramos uma subinterface em eth0
, que está no VLAN800:
/etc/sysconfig/network/05-eth0.netdev
:
[Match]
Name=eth0.800
[Network]
Address=192.168.20.25/24
Gateway=192.168.20.1
DNS=192.168.1.1
VLAN=800
Em seguida, criamos uma ponte para outros dispositivos que precisarão acessar essa VLAN:
/etc/sysconfig/network/20-br800.netdev
:
[NetDev]
Name=br800
Kind=bridge
Em seguida, anexamos a subinterface criada anteriormente à ponte:
/etc/sysconfig/network/50-eth0-800.netdev
:
[Match]
Name=eth0.800
[Network]
Bridge=br800
Agora estamos em um estado em que temos a rede que queremos configurar no host e podemos fazer algo como:
docker run \
--net="none" \
--lxc-conf="lxc.network.type = veth" \
--lxc-conf="lxc.network.ipv4 = 192.168.20.30/24" \
--lxc-conf="lxc.network.ipv4.gateway = 192.168.20.1" \
--lxc-conf="lxc.network.link = br800" \
--lxc-conf="lxc.network.name = eth0" \
--lxc-conf="lxc.network.flags = up" \
-d [Docker Image ID]
Idealmente, não teríamos que fazer tanto hacking apenas para obter a configuração de rede, mas isso leva à capacidade de criar várias pontes conectadas a diferentes VLANs e segmentar tráfego de diferentes containers e forçá-lo a passar por algum roteador upstream.