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

时间:2019-10-15 06:00:11

标签: 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 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版本7.5.1804

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

我在查找强调以下几点的文档时遇到了麻烦,但是我回想起看到了这一点,并且能够通过接受它作为真相来解决我的问题。如果/当我再次偶然发现它时,我将对其进行更新;并非/usr/etc中的所有内容都会授予您SELinux中的写访问权限。至少不是在Docker上下文中。

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

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

请注意,您也可以通过z在docker-compose.yml中为给定服务调用privileged