当你在主机上创建一些容器时,例如:
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 服务在哪里,我们如何根据服务器名称或 MAC 地址分配固定 IP?
我们尝试编辑/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,但我宁愿集中控制它。
有没有办法做到这一点?
答案1
好的,找到了另一种可行的方法:
- 停止所有容器
- 编辑 /etc/default/lxc-net
- 取消注释“LXC_DHCP_CONFILE=/etc/lxc/dnsmasq.conf”
- 创建文件 /etc/lxc/dnsmasq.conf
编辑 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
问题已解决!