J'ai beaucoup de conteneurs Docker dont j'ai besoin adressable sur le même LAN que leurs hôtes. Jusqu'à présent, j'ai atteint cet objectif en utilisant la configuration d'un pont et en leur attribuant manuellement des adresses IP , et en gérant moi-même les adresses IP. Un exemple de démarrage serait comme ceci:
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]
Avec l'hôte ayant le pont défini dans /etc/network/interfaces
(ubuntu) comme ceci:
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
Depuis que j'ai découvert serf , j'ai essayé de passer à l'utilisation de la découverte automatique dans les conteneurs, afin que DHCP puisse garder une trace des adresses IP et les distribuer aux conteneurs. J'ai depuis changé la commande de démarrage en:
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
et le pont vers:
auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
Cela a entraîné le démarrage du conteneur, mais sans IP. J'ai ensuite pris conseil auprès d' un poste en ligne qui a réussi à le faire avec Fedora, en appelant dhclient
. Malheureusement, cela ne fonctionne pas pour moi dans les conteneurs basés sur Ubuntu.
Voici les messages d'erreur suivants que j'obtiens dans différentes conditions:
En cours d'exécution
dhclient
lorsque j'ai activé le--privileged
démarrage du conteneur:dhclient: error while loading shared libraries: libc.so.6: cannot open shared object file: Permission denied
Courir
sudo dhclient eth0
en dehors--privileged
RTNETLINK answers: Operation not permitted mv: cannot move '/etc/resolv.conf.dhclient-new.31' to '/etc/resolv.conf': Device or resource busy
En cours d'exécution
sudo dhclient
oudhclient
(aucune interface spécifiée).Retourne immédiatement et il n'y a toujours pas de connectivité IP ou réseau.
Comment puis-je obtenir des conteneurs Docker pour récupérer des adresses IP dynamiques du même sous-réseau que leurs hôtes, de sorte que je puisse déployer des conteneurs sur plusieurs hôtes sans suivre les adresses IP?
Informaitons supplémentaires
- courir
DOCKER_OPTS="-e lxc"
en/etc/default/docker
- L'hôte est Ubuntu 14.04
- Les conteneurs Docker sont construits à l'aide
from ubuntu:14.04
du Dockerfile.