我在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
答案 0 :(得分:0)
该图像无权编辑usr
文件夹中的文件或创建新文件,您可以从Docs使用--privileged
参数启动容器
答案 1 :(得分:0)
我最近遇到了类似的问题(尽管问题不同),我发现Juan的SELinux and docker notes很有帮助。
我在查找强调以下几点的文档时遇到了麻烦,但是我回想起看到了这一点,并且能够通过接受它作为真相来解决我的问题。如果/当我再次偶然发现它时,我将对其进行更新;并非/usr
或/etc
中的所有内容都会授予您SELinux中的写访问权限。至少不是在Docker上下文中。
您可以在SELinux上下文中访问/etc
和/usr
目录,但是您无法在任何地方获得写入,因此z
和Z
有时会给您打上标签的麻烦从这些位置旋转带有卷挂载的Docker容器时。但是,如果您在其他地方有SELinux受保护的文件,例如在用户的主目录中,您将能够使Docker适当地重新标记这些文件-也就是说,您可以使用z
或Z
标志将这些文件写入SELinux保护的文件/目录
如果您需要在/usr
或/etc
目录中写信并获得无法重新标记的警报,则--privileged
标志或--security-opt label:disable
标志应代替{ {1}}语法。这将允许您具有写访问权,但是您需要从卷装载中删除z
,因为Docker仍然会使您无法重新标记语句。
请注意,您也可以通过z
在docker-compose.yml中为给定服务调用privileged