【发布时间】:2015-12-21 07:02:09
【问题描述】:
在Linux上使用Docker容器进行开发时,存在权限问题:如何管理主机和容器之间的文件所有权和权限。
假设我有一个运行 Ubuntu 和 Apache 服务器的 Docker 映像。使用 Apache(最新版本)的默认设置,文档根目录将是 /var/www/html,而 Apache 将以 www-data 用户身份运行。
为了进行一些开发,我通过 Docker 使用 -v /path/to/my/files:/var/www/html 公开文档根目录。这就是问题出现的地方:
/path/to/my/files 中的文件归容器www-data 用户所有。如果我很幸运并且我的主机有一个www-data 用户,那就是那个用户;否则,它将是容器本地的不同用户。这些文件的权限(可能)是0755。
所以,当我以自己的身份工作时(一个名为 jsmith 的用户),由于文件权限和所有权不正确,我无法编辑这些文件。
我可以将文件的所有权更改为
jsmith,但这会导致 Apache 出现问题 - 它将难以访问文档根目录中的文件。我可以将权限更改为
0777,但我在工作过程中创建的任何新文件都将归jsmith所有。
最终结果是需要不断调整开发文件的所有权和权限。其他人肯定有这个问题,但我看到的每一篇关于在开发工作流程中使用 Docker 的帖子都忽略了这个问题。
我确实有一个解决方案,但我并不完全满意:
我在
/src/myproject设置了一个文件夹。这包含我的开发文件,归www-data:www-data所有。使用BindFS,我将
/src/myproject挂载到~/myproject,将www-data:www-data映射到jsmith:jsmith。这让我可以在~/myproject中编辑文件,而不会乱用权限。Apache Docker 容器使用
-v /src/myproject:/var/www/html挂载/src/myproject目录。 Apache 看到文件的www-data所有权,没有问题。
这很好用,但似乎过于复杂。其他人如何解决这个问题?
【问题讨论】:
-
您有没有找到其他解决权限问题的方法?
-
对不起,我没有任何建议。我来这里是为了寻找相同的答案 - 您的 BindFS 提示对我很有帮助。
-
也许 [lebokus/docker-volume-bindfs ](github.com/lebokus/docker-volume-bindfs) 对你有用。
标签: linux permissions docker