У меня много док-контейнеров, которые мне нужно адресовать в той же локальной сети, что и их хосты. До сих пор я достигал этого, используя настройку моста и назначая им 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
С тех пор как я обнаружил serf , я пытался перейти к использованию автоматического обнаружения внутри контейнеров, чтобы 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 или сетевого подключения.
Как я могу получить контейнеры Docker для захвата динамических IP-адресов из той же подсети, что и их хосты, чтобы я мог развертывать контейнеры на нескольких хостах без отслеживания IP-адресов?
Дополнительная информация
- Работает
DOCKER_OPTS="-e lxc"
в/etc/default/docker
- Хост Ubuntu 14.04
- Контейнеры Docker создаются с использованием
from ubuntu:14.04
Dockerfile.