Eu tenho muitos contêineres de docker que precisam ser endereçados na mesma LAN dos seus hosts. Até agora, eu consegui isso usando a configuração de uma ponte, atribuindo-lhes IPs manualmente e gerenciando-os pessoalmente. Um exemplo de inicialização seria assim:
docker run \
--net="none" \ \
--lxc-conf="lxc.network.type = veth" \
--lxc-conf="lxc.network.ipv4 = 192.168.1.3/24" \
--lxc-conf="lxc.network.ipv4.gateway = 192.168.1.254" \
--lxc-conf="lxc.network.link = br0" \
--lxc-conf="lxc.network.name = eth0" \
--lxc-conf="lxc.network.flags = up" \
-d [Docker Image ID]
Com o host tendo a ponte definida no /etc/network/interfaces
(ubuntu) da seguinte forma:
auto eth0
iface eth0 inet manual
auto br0
iface br0 inet static
address 192.168.1.2
netmask 255.255.255.0
gateway 192.168.1.254
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
Desde que descobri servo , eu tenho tentado passar para usar a descoberta automática dentro dos recipientes, para que DHCP pode manter o controle de IPs e entregá-los aos recipientes. Eu mudei o comando de inicialização para:
docker run \
--net="none" \
--lxc-conf="lxc.network.type = veth" \
--lxc-conf="lxc.network.link = br0" \
--lxc-conf="lxc.network.flags = up" \
-d [Docker Image ID]
/bin/bash
e a ponte para:
auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
Isso resultou na inicialização do contêiner, mas sem um IP. Então, recebi o conselho de uma publicação on-line que conseguiu fazer isso com o Fedora, ligando dhclient
. Infelizmente isso não está funcionando para mim em contêineres baseados no ubuntu.
Abaixo estão as seguintes mensagens de erro que recebo em diferentes condições:
Em execução
dhclient
quando eu habilitei o--privileged
início do contêiner:dhclient: error while loading shared libraries: libc.so.6: cannot open shared object file: Permission denied
Executando
sudo dhclient eth0
quando não estiver em--privileged
RTNETLINK answers: Operation not permitted mv: cannot move '/etc/resolv.conf.dhclient-new.31' to '/etc/resolv.conf': Device or resource busy
Em execução
sudo dhclient
oudhclient
(nenhuma interface especificada).Retorna imediatamente e ainda não há conectividade IP ou de rede.
Como posso fazer com que os contêineres do docker obtenham IPs dinâmicos da mesma sub-rede que seus hosts, para que eu possa implantar contêineres em vários hosts sem rastrear IPs?
Informação extra
- Correndo
DOCKER_OPTS="-e lxc"
em/etc/default/docker
- O host é Ubuntu 14.04
- Os contêineres do Docker são criados usando
from ubuntu:14.04
o Dockerfile.