我安装了全新的 Fedora Server 22。在安装过程中,我选择了预安装 Docker 的选项。我使用 Cockpit 激活了 Docker,并在命令行上安装了一个新的容器:
# docker run -d -h plex --name="plex" -v /etc/docker/plex:/config -v /tank:/data -p 32400:32400 timhaak/plex
当我尝试运行它时出现错误:
+ GROUP=plextmp
+ mkdir -p /config/logs/supervisor
mkdir: cannot create directory ‘/config/logs’: Permission denied
我检查了集装箱的详细信息:
...
"Volumes": {
"/config": "/etc/docker/plex",
"/data": "/tank"
...
"VolumesRW": {
"/config": true,
"/data": true
...
并且目录存在:
# file /etc/docker/plex
/etc/docker/plex: directory
一切似乎都很好。
起初我以为是容器本身的问题,所以我也尝试了其他容器。每个容器都遇到了同样的问题。它们无法创建文件夹或文件(有时甚至无法读取它们)。在 docker 文档(“管理容器中的数据”)中,有一个非常简单的示例,说明如何创建一个新容器,只需打开一个 shell 并从主机挂载一个卷即可:
# docker run --rm -it -v /etc/docker/test:/vol ubuntu /bin/bash
尝试接触 /test 中的文件会导致权限被拒绝错误。
我是否遗漏了什么?
答案1
在我的具体案例中,问题出在 SELinux 上。将其设置为“permissive”后,我就能够使用容器了。
(可能不是最好的解决方案,但在我相应地设置 SELinux 权限之前它是有效的)
更新:这是 Dan Walsh 的一篇简短博客文章,指出了使用 Docker Volumes 和 SELinux 可能出现的问题:
http://www.projectatomic.io/blog/2015/06/using-volumes-with-docker-can-cause-problems-with-selinux/