Когда вы создаете на хосте несколько контейнеров, например:
sudo lxc-create -n container1 -t ubuntu
sudo lxc-create -n container2 -t ubuntu
система LXC создает IP-адреса для хостов в новой подсети, например
lxc-ls --fancy
NAME STATE IPV4 IPV6 AUTOSTART
----------------------------------------------------
container1 RUNNING 10.0.3.143 - NO
container2 RUNNING 10.0.3.12 - NO
Вопрос в том, где находится служба DHCP, которая выделяет эти адреса, и как мы можем выделить фиксированный IP-адрес на основе имени сервера или MAC-адреса?
Мы пробовали редактировать /etc/lxc/default.conf
и добавив:
dhcp-host=container1,10.0.3.10
dhcp-host=container2,10.0.3.20
Затем остановка и запуск контейнеров и выполнение sudo service lxc-net restart
но это не подействовало. Я мог редактировать /etc/network/interfaces
для каждого контейнера и жестко запрограммировать IP вместо использования DHCP, но я бы предпочел управлять им централизованно.
Есть ли способ сделать это?
Хорошо, нашел другой способ сделать это, который работает:
отредактируйте dnsmasq.conf:
dhcp-host = имя_контейнера, 10.0.2.10
перезапуск службы lxc-net
Теперь перезапустите контейнеры и наслаждайтесь славой собственных IP-адресов.
-- РЕДАКТИРОВАТЬ --
Слишком рано заговорил - работает только половина.
Всего 4 контейнера, и в dnsmasq.conf у меня есть:
dhcp-host=host01,10.0.2.10
dhcp-host=host02,10.0.2.20
dhcp-host=host03,10.0.2.30
dhcp-host=host04,10.0.2.40
Теперь, когда я перезапускаю все, включая контейнеры, я получаю следующее:
# lxc-ls --fancy
NAME STATE IPV4 IPV6 AUTOSTART
-----------------------------------------------
host01 RUNNING 10.0.2.99 - YES
host02 RUNNING 10.0.2.20 - YES
host03 RUNNING 10.0.2.198 - YES
host04 RUNNING 10.0.2.40 - YES
Половина из них была правильной. Все контейнеры мы создавали одинаково и никак не редактировались.
У кого-нибудь есть идеи, что происходит?
Это содержимое / etc / network / interfaces одного из контейнеров-нарушителей:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
Ничего отличного от рабочих.
- РЕДАКТИРОВАТЬ 2 ---
остановив все контейнеры, а затем запустите это:
$ sudo restart lxc-net
Исправлена проблема!