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