У мене є багато контейнерів для докерів, на які мені потрібні адреси в тій самій локальній мережі, що і їх хости. До цього часу я домагався цього, використовуючи встановлення мосту та вручну призначаючи їм IP-адреси та сам керуючи IP-адресами. Приклад запуску може бути таким:
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]
З хостом, який має міст, визначений в /etc/network/interfaces
(ubuntu), так:
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
Оскільки я виявив кріпака , я намагався перейти до використання автоматичного виявлення в контейнерах, щоб DHCP міг відслідковувати IP-адреси та передавати їх у контейнери. З тих пір я змінив команду запуску на:
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
і міст до:
auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
Це призвело до запуску контейнера, але не має IP-адреси. Потім я взяв пораду від інтернет-допису, якому вдалося це зробити з Fedora, зателефонувавши dhclient
. На жаль, це не працює для мене в контейнерах на базі ubuntu.
Нижче наведено такі повідомлення про помилки, які я отримую за різних умов:
Запуск,
dhclient
коли я включив--privileged
запуск контейнера:dhclient: error while loading shared libraries: libc.so.6: cannot open shared object file: Permission denied
Запуск,
sudo dhclient eth0
коли не входить--privileged
RTNETLINK answers: Operation not permitted mv: cannot move '/etc/resolv.conf.dhclient-new.31' to '/etc/resolv.conf': Device or resource busy
Запуск
sudo dhclient
абоdhclient
(інтерфейс не вказано).Повертається негайно, і все ще немає підключення до ІР або мережі.
Як я можу змусити докер-контейнери захоплювати динамічні IP-адреси з тієї самої підмережі, що і їх хости, щоб я міг розгорнути контейнери через декілька хостів без відстеження IP-адрес?
Додаткова інформація
- Біг
DOCKER_OPTS="-e lxc"
в/etc/default/docker
- Хост - Ubuntu 14.04
- Докер-контейнери будуються за
from ubuntu:14.04
допомогою Dockerfile.