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

Kar*_*ikJ 9 selinux docker

我在 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 
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

docker: Error response from daemon: error setting label on mount source '/usr/local/xya/log': relabeling content in /usr is not allowed.
Run Code Online (Sandbox Code Playgroud)

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

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

Art*_*org 7

我最近遇到了类似的(尽管不同的问题),我发现 Juan 的SELinux 和 docker 笔记很有帮助。

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

您可以在 SELinux 上下文中访问/etc/usr目录,但无法在任何地方进行写入,因此,zZ从这些位置安装卷并启动 docker 容器时,有时会出现无法标记问题的情况。然而,如果你在其他地方有 SELinux 受保护的文件,例如在用户主目录中,你就可以让 Docker 适当地重新标记这些文件——也就是说,你可以使用 或 写入那些 SELinux 受保护的文件/目录zZ旗帜。

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

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


Lin*_*nPy 3

该图像无权在usr文件夹中编辑或创建新文件,从文档中--privileged您可以使用参数启动容器