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

启用selinux的Docker-不允许在/usr中重新标记内容,docker,selinux,Docker,Selinux,我让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 la

我让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.
根据一些文章(),'z'标志应该使/usr可写;不确定我是否遗漏了什么

Docker版本19.03.3,内置a872fc2f86
CentOS版本:CentOS Linux 7.5.1804版

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

我最近遇到了一个类似的问题(尽管问题不同),我发现Juan的帮助很大

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

您可以访问SELinux上下文中的
/etc
/usr
目录,但您无法在任何地方都获得write,因此
z
z
在从这些位置旋转带有卷装载的docker容器时,有时会导致无法标记问题。但是,如果您在其他地方有SELinux保护的文件,例如在用户主目录中,您可以让Docker适当地重新标记这些文件——也就是说,您可以使用
z
z
标志写入这些SELinux保护的文件/目录

如果需要在
/usr
/etc
目录中写入并获取无法重新标记警报,则应使用
--privileged
标志或标志,而不是
z
语法。这将允许您具有写访问权限,但您需要从卷装载中删除
z
,因为Docker仍然会给您无法重新标记语句

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