Docker启用selinux时,不允许重新标记/usr中的内容。

9

我在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/),'z'标志应该使/usr可写;不确定是否有遗漏。 Docker版本为19.03.3,构建版本为a872fc2f86,CentOS版本为CentOS Linux release 7.5.1804。
2个回答

7

我最近遇到了类似的问题(虽然不太一样),我发现Juan的SELinux和Docker笔记很有帮助。

我无法找到强调以下要点的文档,但我记得看到过,并且能够接受它作为真相而解决了我的问题。如果我再次碰巧找到它,我会更新的;在SELinux中,不是所有位于/usr/etc中的内容都会授予你写权限。至少在Docker上下文中不会。

在SELinux上下文中,您可以访问/etc/usr目录,但您不能在其中任何地方获得写入权限,因此,在从这些位置挂载卷启动Docker容器时,有时zZ会给您带来无法标记的问题。然而,如果您在其他地方拥有受SELinux保护的文件,例如在用户主目录中,您将能够使Docker恰当地重新标记这些文件--也就是说,您将能够使用zZ标志写入这些SELinux受保护的文件/目录。

如果您需要在/usr/etc目录中写入且获得无法重新标记的警报,则应使用--privileged标志或--security-opt label:disable标志代替z语法。这将允许您具有写权限,但您需要从卷挂载中删除z,因为Docker仍会给出无法重新标记的声明。

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


3

这个镜像没有权限在usr文件夹中编辑或创建新文件。从文档中可以看到,您可以使用--privileged参数启动容器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接