在多个容器之间共享主机目录与 SELinux

在多个容器之间共享主机目录与 SELinux

与 docker 容器共享主机目录通常很简单:

$ docker create -v /path/to/hostdir:/path/inside/container --name conta ...

如果涉及 SELinux,事情会变得更加复杂 - 例如,SELinux 在执行 SELinux 的 docker 主机(也是 Fedora 23)上执行 Fedora 23 容器。

在这种情况下,显然,必须指示 docker 进行一些重新标记:

$ docker create -v /path/to/hostdir:/path/inside/container:Z --name conta ...

如果没有:Z后缀,当尝试读取/写入共享主机目录中的文件时,您会收到权限被拒绝的错误。一切都:Z按预期进行。

:Z但是如果主机目录应该与以下对象共享,则该方法会失败多种的(SELinux 强制)同时容器:

$ docker create -v /path/to/hostdir:/path/inside/container:Z --name conta ...
$ docker create -v /path/to/hostdir:/path/inside/container:Z --name contb ...

在第二条命令之后,“contb”可以访问主机目录,但“conta”无法再访问它(权限被拒绝错误)。

看来 docker 的第二次重新标记使第一次无效。

如何在 SELinux 系统上修复此问题?

答案1

不确定它是否有帮助,因为我现在没有使用 docker,但我已经非常接近这些技术了。

好文章Dan Walsh 描述了命令之间:Z和命令:z中的差异docker

TL;DR,第一个 ( :Z) 是使用多类别安全 (MCS) 标签,这将为不同的容器制作具有不同不同类别的相同标签。

第二个 ( :z) 将为每个容器使用相同的标签来标记目录,并且它们应该能够同时访问该路径。

如果没有帮助,请提供您从 docker 获得的 AVC。否则就像猜测一样。

相关内容