我正在运行带有单个 lxc 客户机的 Ubuntu 12.04.5 LTS(lxc 软件包 0.7.5-3ubuntu69)。一切正常,只是 lxc 容器似乎使用/干扰了主机 tty 设备。
一旦启动容器,我就无法再使用其控制台登录主机,因为输入用户名后,它总是显示“无法确定您的 tty 名称。”然后就挂起了。主机上的系统日志慢慢地充满了“init:tty1 主进程 (17911) 以状态 1 终止”和“init:tty1 主进程已结束,正在重生”。
有没有办法拒绝 lxc 访问主机控制台/tty?有没有办法修复主机而不必重新启动?
这是我当前的 lxc 容器配置:
lxc.utsname = guest1
lxc.rootfs = /var/lib/lxc/guest1/rootfs
lxc.devttydir = lxc
lxc.tty = 4
lxc.pts = 1024
lxc.mount = /var/lib/lxc/guest1/fstab
lxc.arch = amd64
lxc.cap.drop = sys_module mac_admin mac_override
lxc.pivotdir = lxc_putold
# Interface for public network
lxc.network.type=veth
lxc.network.link=br0
lxc.network.flags=up
lxc.network.hwaddr = 00:16:3e:d6:01:04
# Interface for private network
lxc.network.type=veth
lxc.network.link=br1
lxc.network.flags=up
lxc.network.hwaddr = 00:16:3e:d6:01:05
# Deny access to all devices by default
lxc.cgroup.devices.deny = a
# Allow any mknod (but not using the node)
lxc.cgroup.devices.allow = c *:* m
lxc.cgroup.devices.allow = b *:* m
# /dev/null and /dev/zero
lxc.cgroup.devices.allow = c 1:3 rwm
lxc.cgroup.devices.allow = c 1:5 rwm
# /dev/full
lxc.cgroup.devices.allow = c 1:7 rwm
# consoles
#lxc.cgroup.devices.allow = c 5:1 rwm
#lxc.cgroup.devices.allow = c 5:0 rwm
#lxc.cgroup.devices.allow = c 4:0 rwm
#lxc.cgroup.devices.allow = c 4:1 rwm
# /dev/{,u}random
lxc.cgroup.devices.allow = c 1:9 rwm
lxc.cgroup.devices.allow = c 1:8 rwm
lxc.cgroup.devices.allow = c 136:* rwm
lxc.cgroup.devices.allow = c 5:2 rwm
# rtc
lxc.cgroup.devices.allow = c 254:0 rwm
# fuse
#lxc.cgroup.devices.allow = c 10:229 rwm
# tun
#lxc.cgroup.devices.allow = c 10:200 rwm
# hpet
lxc.cgroup.devices.allow = c 10:228 rwm
# kvm
#lxc.cgroup.devices.allow = c 10:232 rwm
答案1
恢复主机 TTY 的解决方案似乎是删除主机上现有的 /dev/tty[1-4] 设备并使用 mknod 重新创建它们。
我还没有测试重新启动容器后 lxc 是否会再次破坏它们,但至少上述方法修复了它。
答案2
尝试将此选项作为配置的一部分
lxc.devttydir = lxc
这将为特定容器的 tty1 和 console 创建目录 rootfs/dev/lxc;在这种情况下,tty1 是容器可以使用的下一个可用终端;