启用了 selinux 的 Docker - 不允许在 /usr 中重新标记内容

2024-03-21

我在 Centos7 上安装了 Docker,并将 selinux 设置为在主机上强制执行,并且 Docker 守护进程以 --selinux-enabled 标志启动。

当我尝试运行以下命令时

docker run -it   -v /usr/local/xya/log:/usr/local/xya/log:z centos/systemd touch /usr/local/xya/log/test 

我收到以下错误:

docker: Error response from daemon: error setting label on mount source '/usr/local/xya/log': relabeling content in /usr is not allowed.

根据一些文章(http://jaormx.github.io/2018/selinux-and-docker-notes/ http://jaormx.github.io/2018/selinux-and-docker-notes/),'z' 标志应该使 /usr 可写;不确定我是否遗漏了一些东西。

Docker 版本 19.03.3,构建 a872fc2f86 CentOS版本:CentOS Linux发行版7.5.1804


我最近遇到了类似的问题(尽管不同),我发现了 Juan 的SELinux 和 docker 笔记 http://jaormx.github.io/2018/selinux-and-docker-notes/有帮助。

我很难找到强调以下观点的文档,但我记得看到过它,并且能够通过接受它作为事实来解决我的问题。如果/当我再次偶然发现它时,我会更新它;并不是里面的一切/usr or /etc将授予您在 SELinux 中的写权限。至少在 Docker 环境中不是这样。

您可以访问/etc and /usrSELinux 上下文中的目录,但你无法在任何地方获得写入,所以z and Z当从这些位置安装卷来启动 docker 容器时,有时会出现无法标记的问题。但是,如果您在其他地方有 SELinux 受保护的文件,例如在用户主目录中,您可以让 Docker 适当地重新标记这些文件——也就是说,您可以使用以下命令写入那些受 SELinux 保护的文件/目录z or Z flags.

如果您需要在/usr or /etc目录并获取无法重新标记警报,--privileged旗帜或--security-opt label:disable https://bugzilla.redhat.com/show_bug.cgi?id=1557893标志应该代替z句法。这将允许您具有写访问权限,但您需要删除z从你的卷挂载中,因为 Docker 仍然会给你无法重新标记的语句。

请注意,您还可以调用privileged在 docker-compose.yml 中通过privileged: true对于给定的服务

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

启用了 selinux 的 Docker - 不允许在 /usr 中重新标记内容 的相关文章

随机推荐