Ich habe viele Docker-Container, die ich im selben LAN wie ihre Hosts adressieren muss. Bisher habe ich dies erreicht, indem ich eine Bridge eingerichtet und ihnen manuell IPs zugewiesen und die IPs selbst verwaltet habe. Ein Beispiel für ein Startup wäre wie folgt:
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]
Wenn der Host die Bridge in /etc/network/interfaces
(ubuntu) wie folgt definiert hat :
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
Seitdem ich Serf entdeckt habe , habe ich versucht, die automatische Erkennung in den Containern zu verwenden, damit DHCP die IP-Adressen nachverfolgen und an die Container weitergeben kann. Ich habe seitdem den Startbefehl geändert 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
und die Brücke zu:
auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
Dies führte dazu, dass der Container gestartet wurde, aber keine IP hatte. Ich habe mich dann von einem Online-Post beraten lassen, der es geschafft hat, es mit Fedora zu erledigen, indem er anrief dhclient
. Leider funktioniert dies bei Ubuntu-basierten Containern nicht.
Im Folgenden sind die folgenden Fehlermeldungen aufgeführt, die unter verschiedenen Bedingungen angezeigt werden:
Wird ausgeführt,
dhclient
wenn ich das--privileged
Starten des Containers aktiviert habe :dhclient: error while loading shared libraries: libc.so.6: cannot open shared object file: Permission denied
Laufen,
sudo dhclient eth0
wenn nicht in--privileged
RTNETLINK answers: Operation not permitted mv: cannot move '/etc/resolv.conf.dhclient-new.31' to '/etc/resolv.conf': Device or resource busy
Läuft
sudo dhclient
oderdhclient
(keine Schnittstelle angegeben).Kehrt sofort zurück und es besteht noch keine IP- oder Netzwerkverbindung.
Wie kann ich Docker-Container dazu bringen, dynamische IP-Adressen aus demselben Subnetz wie ihre Hosts abzurufen, sodass ich Container auf mehreren Hosts bereitstellen kann, ohne die IP-Adressen zu verfolgen?
Zusatzinformation
- Laufen
DOCKER_OPTS="-e lxc"
in/etc/default/docker
- Host ist Ubuntu 14.04
- Docker-Container werden mithilfe
from ubuntu:14.04
der Docker- Datei erstellt.