我在 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 /usr
SELinux 上下文中的目录,但你无法在任何地方获得写入,所以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(使用前将#替换为@)