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

11 浏览
0 Comments

在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。

怎么了?

admin 更改状态以发布 2023年5月22日
0
0 Comments

这是一个SELinux问题。

你可以在主机上暂时输入

su -c "setenforce 0"

来访问,或者通过运行以下命令添加一个SELinux规则:

chcon -Rt svirt_sandbox_file_t /path/to/volume

0
0 Comments

完整的情况请参考这篇关于卷和SELinux的Project Atomic博客文章

具体来说:

最近这变得更容易了,因为Docker终于合并了一个补丁,
新版docker-1.7中将会看到该补丁
(我们在RHEL,CentOS和Fedora的docker-1.6中使用该补丁)。

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

例如:

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

将自动执行man页面中描述的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对于每个容器都不相同。

0