如何设置标准 LXC 容器的 DHCP IP?

eos*_*eos 4 dhcp lxc

当您在主机上创建一些容器时,例如:

sudo lxc-create -n container1 -t ubuntu
sudo lxc-create -n container2 -t ubuntu
Run Code Online (Sandbox Code Playgroud)

LXC 系统为新子网上的主机创建 IP 地址,例如

lxc-ls --fancy
NAME            STATE    IPV4        IPV6  AUTOSTART
----------------------------------------------------
container1  RUNNING  10.0.3.143  -     NO
container2  RUNNING  10.0.3.12   -     NO
Run Code Online (Sandbox Code Playgroud)

问题是,分配这些地址的DHCP服务在哪里,我们如何根据服务器名称或MAC地址分配固定IP?

我们尝试编辑/etc/lxc/default.conf和添加:

    dhcp-host=container1,10.0.3.10
    dhcp-host=container2,10.0.3.20
Run Code Online (Sandbox Code Playgroud)

然后停止和启动容器并执行,sudo service lxc-net restart但这没有效果。我可以/etc/network/interfaces在每个容器上编辑并硬编码 IP,而不是使用 DHCP,但我更愿意集中控制它。

有没有办法做到这一点?

eos*_*eos 5

好的,找到了另一种可行的方法:

  1. 停止所有容器
  2. 编辑 /etc/default/lxc-net
  3. 取消注释“LXC_DHCP_CONFILE=/etc/lxc/dnsmasq.conf”
  4. 创建文件 /etc/lxc/dnsmasq.conf
  5. 编辑 dnsmasq.conf:

    dhcp-host=container_name,10.0.2.10

  6. 服务 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
Run Code Online (Sandbox Code Playgroud)

现在,当我重新启动包括容器在内的所有内容时,我得到以下信息:

# 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
Run Code Online (Sandbox Code Playgroud)

猜对了一半。我们以相同的方式创建的所有容器,并且没有以任何方式进行编辑。

任何人有任何想法是怎么回事?

这是违规容器之一上的 /etc/network/interfaces 的内容:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp
Run Code Online (Sandbox Code Playgroud)

和上班族没什么两样。

-- 编辑 2 ---

停止所有容器,然后运行:

$ sudo restart lxc-net
Run Code Online (Sandbox Code Playgroud)

修复了问题!