在 Docker 中访问主机目录的权限被拒绝

新手上路,请多包涵

我正在尝试在 Docker 中挂载一个主机目录,但是即使访问权限看起来不错,我也无法从容器内访问它。

我在做

sudo docker run -i -v /data1/Downloads:/Downloads ubuntu bash

接着

ls -al

它给了我:

 total 8892
drwxr-xr-x.  23 root root    4096 Jun 18 14:34 .
drwxr-xr-x.  23 root root    4096 Jun 18 14:34 ..
-rwxr-xr-x.   1 root root       0 Jun 18 14:34 .dockerenv
-rwx------.   1 root root 9014486 Jun 17 22:09 .dockerinit
drwxrwxr-x.  18 1000 1000   12288 Jun 16 11:40 Downloads
drwxr-xr-x.   2 root root    4096 Jan 29 18:10 bin
drwxr-xr-x.   2 root root    4096 Apr 19  2012 boot
drwxr-xr-x.   4 root root     340 Jun 18 14:34 dev
drwxr-xr-x.  56 root root    4096 Jun 18 14:34 etc
drwxr-xr-x.   2 root root    4096 Apr 19  2012 home

还有更多这样的行(我认为这是相关部分)。

如果我做

cd /Downloads
ls

结果是

ls: cannot open directory .: Permission denied

主机是 Fedora 20,带有 Docker 1.0.0 和 go1.2.2。

出了什么问题?

原文由 user3753011 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 648
1 个回答

有关完整的故事,请参阅 这篇关于 Volumes 和 SELinux 的 Project Atomic 博客文章

具体来说:

最近这变得更容易了,因为 Docker 最终合并了一个将出现在 docker-1.7 中的补丁(我们一直在 RHEL、CentOS 和 Fedora 上的 docker-1.6 中携带这个补丁)。

此补丁添加了对“z”和“Z”作为卷挂载 (-v) 选项的支持。

例如:

 docker run -v /var/db:/var/db:z rhel7 /bin/sh

将自动执行手册页中描述的 chcon -Rt svirt_sandbox_file_t /var/db

更好的是,您可以使用 Z。

 docker run -v /var/db:/var/db:Z rhel7 /bin/sh

这将使用容器将运行的确切 MCS 标签标记容器内的内容,基本上它运行 chcon -Rt svirt_sandbox_file_t -l s0:c1,c2 /var/db 其中 s0:c1,c2 每个容器都不同。

原文由 gregswift 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题