Tengo muchos contenedores acoplables que necesito direccionar en la misma LAN que sus hosts. Hasta ahora, he estado logrando esto al configurar un puente y asignarles manualmente las IP , y administrar las IP yo mismo. Un ejemplo de inicio sería así:
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]
Con el host con el puente definido en /etc/network/interfaces
(ubuntu) así:
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 descubrí el siervo , he estado tratando de usar el descubrimiento automático dentro de los contenedores, para que DHCP pueda realizar un seguimiento de las IP y entregarlas a los contenedores. Desde entonces cambié el comando de inicio a:
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
y el puente para:
auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
Esto dio como resultado que el contenedor se iniciara, pero que no tuviera una IP. Luego tomé el consejo de una publicación en línea que logró hacerlo con Fedora, llamando dhclient
. Lamentablemente, esto no funciona para mí en contenedores basados en ubuntu.
A continuación se muestran los siguientes mensajes de error que recibo en diferentes condiciones:
Ejecutando
dhclient
cuando he habilitado--privileged
al iniciar el contenedor:dhclient: error while loading shared libraries: libc.so.6: cannot open shared object file: Permission denied
Corriendo
sudo dhclient eth0
cuando no está--privileged
RTNETLINK answers: Operation not permitted mv: cannot move '/etc/resolv.conf.dhclient-new.31' to '/etc/resolv.conf': Device or resource busy
En ejecución
sudo dhclient
odhclient
(sin interfaz especificada).Regresa de inmediato y todavía no hay conectividad IP o de red.
¿Cómo puedo obtener contenedores de Docker para tomar IP dinámicas de la misma subred que sus hosts, de modo que pueda implementar contenedores en varios hosts sin rastrear IP?
Información extra
- Corriendo
DOCKER_OPTS="-e lxc"
en/etc/default/docker
- El host es Ubuntu 14.04
- Los contenedores Docker se crean utilizando
from ubuntu:14.04
el Dockerfile.