lxc容器中无法访问宿主机物理设备问题,可通过如下方法解决:
lxc-cgroup -n xxx devices.list #显示允许容器xxx使用的设备列表
lxc-cgroup -n xxx cpuset.cpus “0,3” #将处理器0和3分配给容器xxx
设备白名单
lxc.cgroup.devices.allow:将设备添加到白名单中;
lxc.cgroup.devices.deny:将设备从白名单中删除;
当前控制组中的白名单列表可从devices.list中得到,白名单列表的每个入口包含四个域,其形式如下:
type major:minor access
1
其中type可选值为:a , c , b ,a表示所有设备,c为字符设备,b为块设备。
major和minor为设备的主从设备号,用整数或者*表示所有设备。
access为访问权限的结合r(读),w(写)和m(mknod)。
如:
c 1:3 mr #允许对/dev/null进行读和mknode操作。
a *:* rwm #允许对所有设备进行读写和mknode操作。
可以在容器配置文件中添加如下:
lxc.cgroup.devices.deny = a
# /dev/null and zero
lxc.cgroup.devices.allow = c 1:3 rwm
lxc.cgroup.devices.allow = c 1:5 rwm
如添加串口设备:
lxc.cgroup.devices.allow = c 4:56 rwm
lxc.mount.entry = /dev/ttyx2 dev/ttyx2 none bind,optional,create=file
其中4和56分别为tty对应的主次设备号,这样容器中即可访问host的ttyx2设备了,同时在容器的文件系统/dev下也可以看到此设备。
也可通过host给容器添加设备,操作方法为:lxc-device -n mylxc add /dev/ttyuart0