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
dhclientquando eu habilitei o--privilegedinício do contêiner:dhclient: error while loading shared libraries: libc.so.6: cannot open shared object file: Permission deniedExecutando
sudo dhclient eth0quando não estiver em--privilegedRTNETLINK answers: Operation not permitted mv: cannot move '/etc/resolv.conf.dhclient-new.31' to '/etc/resolv.conf': Device or resource busyEm execução
sudo dhclientoudhclient(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.04o Dockerfile.