Mam wiele kontenerów dokerów, których potrzebuję do adresowania w tej samej sieci LAN, co ich hosty. Do tej pory osiągałem to poprzez konfigurację mostu i ręczne przypisywanie im adresów IP oraz samodzielne zarządzanie adresami IP. Przykładowy start wyglądałby tak:
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]
Host ma zdefiniowany mostek w /etc/network/interfaces
(ubuntu) w następujący sposób:
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
Odkąd odkryłem poddaństwo , staram się przejść do automatycznego wykrywania w kontenerach, aby DHCP mógł śledzić adresy IP i przekazywać je do kontenerów. Od tego czasu zmieniłem polecenie uruchamiania na:
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
i most do:
auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
Spowodowało to uruchomienie kontenera, ale nie posiadało adresu IP. Następnie skorzystałem z porady w internetowym poście, któremu udało się to zrobić z Fedorą, dzwoniąc dhclient
. Niestety nie działa to dla mnie w kontenerach opartych na Ubuntu.
Poniżej znajdują się następujące komunikaty o błędach, które otrzymuję w różnych warunkach:
Uruchamianie
dhclient
po włączeniu--privileged
uruchamiania kontenera:dhclient: error while loading shared libraries: libc.so.6: cannot open shared object file: Permission denied
Uruchamianie,
sudo dhclient eth0
gdy nie ma--privileged
RTNETLINK answers: Operation not permitted mv: cannot move '/etc/resolv.conf.dhclient-new.31' to '/etc/resolv.conf': Device or resource busy
Uruchomiony
sudo dhclient
lubdhclient
(nie określono interfejsu).Zwraca natychmiast i nadal nie ma połączenia IP ani połączenia sieciowego.
Jak mogę zmusić kontenery dokujące do pobierania dynamicznych adresów IP z tej samej podsieci co ich hosty, tak że mogę wdrażać kontenery na wielu hostach bez śledzenia adresów IP?
Informacje dodatkowe
- uruchomiony
DOCKER_OPTS="-e lxc"
w/etc/default/docker
- Hostem jest Ubuntu 14.04
- Kontenery Docker są budowane przy użyciu
from ubuntu:14.04
pliku Docker.