Answers:
简短的答案是,你不能。LXC容器与主机共享它们的内核,并且默认情况下不允许加载模块(因为这样做非常危险)。
标准建议是在启动容器之前在主机上加载任何模块。您可以使用良好的旧初始化脚本或使用lxc钩子来完成此操作(有关详细信息,请参阅我的最新帖子:https://www.stgraber.org/2013/12/23/lxc-1-0-some-更多高级的容器用法/)
出于此答案的目的,我们假设您的容器名为““ foo”。
在主机上,保存的副本/var/lib/lxc/foo/config
,以防我的说明破坏了某些内容。
您将需要配置容器以保留该SYS_MODULE
功能。
请注意,这种配置使该容器能够接管内核,从而接管主机。
为此,您将需要更改"lxc.cap.drop"
或"lxc.cap.keep"
配置行。
如果您正在运行使用创建的Ubuntu 19.04 guest虚拟机,"lxc-create --name foo --template download -- ..."
则:
/var/lib/lxc/foo/config
将包含一行
lxc.include = /usr/share/lxc/ubuntu.common.conf
/usr/share/lxc/ubuntu.common.conf
将包含一行
lxc.include = /usr/share/lxc/config/common.conf
/usr/share/lxc/config/common.conf
将包含这样的行
lxc.cap.drop = mac_admin mac_override sys_time sys_module sys_rawio
您应将最后一行复制到的末尾/var/lib/lxc/foo/config
(或之后的任何位置"include /usr/share/lxc/ubuntu.common.conf"
),然后"sys_module"
从该列表中删除。
您需要在容器中复制内核模块。
如果您的主机运行的是Ubuntu内核,则您可以"sudo apt install kernel-image-$(uname -r)"
从来宾中执行类似的操作。
否则,可能需要从主机执行以下操作(假设您的容器名为“ foo”):
mkdir -p /var/lib/lxc/foo/rootfs/lib/modules
cp -apr /lib/modules/$(uname -r) /var/lib/lxc/foo/rootfs/lib/modules/
此后,请关闭guest虚拟机foo(如果正在运行),然后使用类似的命令重新启动它"lxc-start --name foo"
。
现在,LXC容器应该能够加载和卸载内核模块。