在Docker中为所有人以读/写模式挂载文件

时间:2015-11-18 16:03:16

标签: linux permissions docker boot2docker

在我的MacOS笔记本电脑上,我使用以下方法在新创建的容器中安装了一个文件:

docker run --name mediawiki --link mysql:mysql -p 80:80 -v /Users/poiuytrez/Downloads/LocalSettings.php:/var/www/html/LocalSettings.php
 --rm poiuytrez/mediawiki:1.25.3

但是,apache似乎有问题要读取文件。我们可以通过在容器中运行bash命令来学习读取权限不适用于所有:

root@078252e20671:/var/www/html# ls -l LocalSettings.php
-rw-r----- 1 1000 staff 4857 Nov 18 15:44 LocalSettings.php

我在Linux Debian 8机器上安装的docker上尝试了相同的过程,我得到了:

root@16e34a9b169d:/var/www/html# ls -l LocalSettings.php
-rw-r--r-- 1 www-data www-data 4858 Nov 19 13:32 LocalSettings.php

对我来说好多了。

如何在没有在boot2docker / dockermachine上执行chmod a + r的情况下为每个人添加读取权限?

我正在使用Docker 1.8.3

2 个答案:

答案 0 :(得分:0)

在我的Mac上,

LocalSettings.php是-rw-r -----。所以在容器中它是一样的......

答案 1 :(得分:0)

在docker-machine和boot2docker中,您的/ Users目录在同一路径的虚拟机内映射,因此当您映射该卷时,如:

-v /Users/poiuytrez/Downloads/LocalSettings.php:/var/www/html/LocalSettings.php

实际上是你在容器中安装的boot2docker目录,因此有2个级别。

您可以看到 LocalSettings.php 所有者在容器中不存在,因此当您ls -l用户ID在您的案例中显示用户ID 1000和组员工时。

-rw-r----- 1 1000 staff 4857 Nov 18 15:44 LocalSettings.php

1000名员工

尝试查看boot2docker vm中的所有者和权限,其中包含boot2docker sshdocker-machine ssh <you-machine-name>ls -l

其他方法是在容器中添加ID为1000的用户,并以此用户身份运行您的Web服务器。

您还可以将fix-permission.sh脚本添加到容器运行命令。

在Docker路线图中,下一版本中的用户命名空间有一些改进。我几天前看到这篇文章: http://integratedcode.us/2015/10/13/user-namespaces-have-arrived-in-docker/  我希望它能解决这个所有权问题。