我有一个带有 php 应用程序的 docker
例如,我有一个分享量
/home/me/dev/site <=> /var/www/site
我可以在我的主机上写一些东西,它将与容器同步
如果我启动
sudo docker exec test touch /var/www/site/test.txt
有用
但是,如果我的服务器尝试将文件创建为 www-data
由于权利的原因,这不起作用。
有没有办法让 www-data
访问我的共享卷?
我正在使用 boot2docker
原文由 Ajouve 发布,翻译遵循 CC BY-SA 4.0 许可协议
Docker 中的(绑定挂载)卷将维护在 Docker 主机本身上设置的权限。在容器中使用它们之前,您可以使用它来设置这些文件和目录的权限。
一些背景;
Linux 中的权限基于用户和组 id (
'uid'
/'gid'
)。即使您 将 用户名和组 名 视为所有者,这些名称在 Linux 中实际上并不重要,它们只是为了让您更容易查看谁是文件的所有者(它们是从/etc/passwd
文件)。您可以在文件上设置 任何
uid
/gid
;设置这些权限时,用户不必 _存在_。例如;检查权限(容器内部和外部)
如上所述,Docker 在使用卷时维护主机的所有权。此示例显示卷中的权限和所有权在容器 外部 和 内部 是相同的;
设置权限
如上所述,用户不必存在才能使用它们,因此即使我们在 Docker 主机上没有
www-data
用户,如果我们知道容器内该用户的“uid”和“gid”;我们看看容器 里面 的www-data用户的uid和gid是什么;
在更改权限 之前 首先检查状态。这次我们以用户
www-data
运行 nginx 容器;接下来设置本地目录的权限,看看能不能写;
成功!