为 Docker 中的所有人以 read/write 模式挂载文件

Mount a file in read/write mode for all in Docker

在我的 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

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

在 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 虚拟机中的所有者和权限,其中包含 boot2docker sshdocker-machine ssh <you-machine-name>ls -l

其他方法是在您的容器中添加一个 ID 为 1000 的用户,并且 运行 您的 Web 服务器作为该用户。

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

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