我正在我的 Arch Linux 工作站上使用 LXC 作为学习体验。我按照 Archwiki 上的 LXC 页面上的指南并为容器设置静态 IP。这就是我的网络配置:
/etc/netctl/lxcbridge
---------------------
Description="LXC Bridge"
Interface=br0
Connection=bridge
BindsToInterfaces=(enp1s0)
IP=static
Address=('192.168.0.20/24')
Gateway='192.168.0.1'
DNS=('192.168.0.1')
以及容器配置:
/var/lib/lxc/testcontainer/config
---------------------------------
lxc.network.type = veth
lxc.network.link = br0
lxc.network.ipv4 = 192.168.0.198/24
然而根据lxc-ls -f
它得到一个额外的IP地址。
NAME STATE AUTOSTART GROUPS IPV4 IPV6
testcontainer RUNNING 0 - 192.168.0.198, 192.168.0.220 -
我只想192.168.0.198
。我不确定为什么它会分配第二个。
答案1
因此,经过更多研究后,我确定了为什么会发生这种情况。我使用默认的 Ubuntu 和 Debian 模板来创建容器,并将其网络设置为使用 DHCP 向路由器请求 IP。因此,最初使用 lxc.container.config 设置静态 IP,然后当容器启动时,它会查询路由器(或您拥有的任何 DHCP 服务器)以获取分配给它的辅助 IP。
阻止这种情况的最合乎逻辑的方法可能是在容器内分配静态 IP。所以在基于 Debian 的模板上编辑/etc/network/interfaces
:
auto etho0
iface etho0 inet static
address 192.168.0.15
netmask 255.255.255.0
gateway 192.168.0.1
然后从 lxc 配置中删除 ipv4 行/var/lib/lxc/testcontainer/config
:
lxc.network.type = veth
lxc.network.link = br0
另一种方法是让主机通过保留 ipv4 行来设置 ip /var/lib/lxc/testcontainer/config
,并通过将其设置为手动来明确告诉容器不要触摸接口:
auto eth0
iface eth0 inet manual
显然,如果主机暂停然后恢复,第二种方法会出现一些问题。可能最好使用第一种方法。