LXC 下的网络(dhcpcd)

LXC 下的网络(dhcpcd)

我想使用 LXC 启动 Arch Linux 实例。几乎所有操作都正常,但在尝试使用配置接口时遇到以下错误dhcpcd

# dhcpcd eth0
dhcpcd[4213]: version 5.6.4 starting
dhcpcd[4213]: eth0: if_init: Read-only file system
dhcpcd[4213]: eth0: interface not found or invalid

dhcpcd这似乎是尝试修改的直接结果/proc/sys/net/ipv4/conf/eth0/promote_secondaries

4210  open("/proc/sys/net/ipv4/conf/eth0/promote_secondaries", O_WRONLY|O_CREAT|O_TRUNC, 0666) = -1 EROFS (Read-only file system)
4210  writev(2, [{"dhcpcd[4210]: eth0: if_init: Read-only file system", 50}, {"\n", 1}], 2) = 51

我可以使用bind支架来解决这个问题:

# touch /tmp/promote_secondaries
# mount -o bind /tmp/promote_secondaries \
  /proc/sys/net/ipv4/conf/eth0/promote_secondaries

但这似乎是个糟糕的主意。有没有办法在dhcpcd不使用这个 hack 的情况下在 LXC 下运行?为什么在 LXC 下无法访问此 sysctl?

答案1

原因是,在启动时,您的容器会在 /proc 结构顶部安装 /proc/sys 的只读版本。

容器内部:

# grep proc /proc/mounts 
proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
proc /proc/sys proc ro,relatime 0 0

您可以 umount(或 mount -o remount,rw)它,然后问题就会消失。

umount /proc/sys

只读的 /proc/sys 目录旨在保护主机(的整体稳定性)免受 LXC 容器的(意外)修改,因此上述声明确实存在风险。

答案2

我有同样的问题。我不知道一般可以对 ro 文件系统做些什么,但为了修复 dhcp 问题,我使用 dhclient 而不是 dhcpcd。dhclient 不会尝试在 /proc/sys 上写入任何内容。

相关内容