我正在尝试在 Centos 容器内运行一个应用程序,并且需要实时运行。我用谷歌搜索了一下,建议是添加 lxc.cap.keep = sys_nice。
在我这样做之后,lxc-start 抱怨只有 lxc.cap.keep 和 lxc.keep.drop 不允许并排。事实上,全局 lxc 配置文件中有几个 lxc.cap.drop 。
我该如何解决这个问题?
答案1
你只需要思考lxc.cap.keep
和lxc.cap.drop
作为白名单和黑名单。如果不能同时使用两者,则不要将条目添加到白名单,而是从黑名单中删除该条目。事实上,如果您无法使用白名单,则意味着黑名单正在使用。如果该能力被删除,则意味着它已在黑名单中。所以你必须重新定义lxc.cap.drop
。
所有这些配置都已包含,/usr/share/lxc/config
但可能会因(主机)发行版或软件包版本而略有不同。有时配置文件包含其他配置文件。这些条目都是累积的,因此要么必须直接编辑文件(小心升级......),要么必须找到所有条目来替换它们。
最简单的是,对于全局替换,该文件
/usr/share/lxc/config/centos.common.conf
包含类似于以下内容的行:lxc.cap.drop = sys_module sys_nice sys_pacct
删除不需要的条目,因此在此示例中替换为:
lxc.cap.drop = sys_module sys_pacct
要仅替换一个容器中的配置,请找到一种方法来枚举所有已删除的功能(一些 lxc 详细日志或任何其他方法),并且作为手动的告诉,使用没有值的条目取消黑名单,然后“重建”它。如果主机也是 CentOS,则在删除后将
sys_nice
其添加到容器的配置中,在任何包含之后:lxc.cap.drop = lxc.cap.drop = mac_admin mac_override setfcap lxc.cap.drop = sys_module sys_pacct lxc.cap.drop = sys_rawio sys_time