Ho molti container docker che devo indirizzare sulla stessa LAN dei loro host. Fino ad ora, ho raggiunto questo obiettivo utilizzando la creazione di un bridge e l'assegnazione manuale degli IP e la gestione degli stessi . Un esempio di avvio sarebbe il seguente:
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 l'host che ha il bridge definito in /etc/network/interfaces
(ubuntu) in questo modo:
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
Da quando ho scoperto servo , ho cercato di passare all'utilizzo del rilevamento automatico all'interno dei contenitori, in modo che il DHCP possa tenere traccia degli IP e distribuirli ai contenitori. Da allora ho cambiato il comando di avvio in:
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 il ponte per:
auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
Ciò ha comportato l'avvio del contenitore, ma non un IP. Ho quindi ricevuto consigli da un post online che è riuscito a farlo con Fedora, chiamando dhclient
. Purtroppo questo non funziona per me nei contenitori basati su Ubuntu.
Di seguito sono riportati i seguenti messaggi di errore che ricevo in diverse condizioni:
In esecuzione
dhclient
quando ho abilitato l'--privileged
avvio del contenitore:dhclient: error while loading shared libraries: libc.so.6: cannot open shared object file: Permission denied
In esecuzione
sudo dhclient eth0
quando non in--privileged
RTNETLINK answers: Operation not permitted mv: cannot move '/etc/resolv.conf.dhclient-new.31' to '/etc/resolv.conf': Device or resource busy
In esecuzione
sudo dhclient
odhclient
(nessuna interfaccia specificata).Ritorna immediatamente e non è ancora presente alcuna connessione IP o di rete.
Come posso ottenere contenitori docker per acquisire IP dinamici dalla stessa sottorete dei loro host, in modo da poter distribuire contenitori su più host senza tenere traccia degli IP?
Informazioni extra
- Esecuzione
DOCKER_OPTS="-e lxc"
in/etc/default/docker
- L'host è Ubuntu 14.04
- I contenitori Docker vengono creati utilizzando
from ubuntu:14.04
nel Dockerfile.