在Linux上的Docker容器中进行开发时,存在一个权限问题:如何管理主机和容器之间的文件所有权和权限。
想象一下,我有一个运行 Ubuntu 的 Docker 映像和一个 Apache 服务器。使用 Apache(最新版本)的默认设置,文档根目录将为/var/www/html
Apache 将作为www-data
user.
为了进行一些开发,我通过 Docker 公开文档根目录-v /path/to/my/files:/var/www/html
。这就是问题出现的地方:
文件在/path/to/my/files
归容器所有www-data
用户。如果我很幸运并且我的主人有www-data
user,就是那个用户;否则,它将是容器本地的不同用户。这些文件的权限(可能)是0755
.
所以,当我以自己的身份工作时(一位名为jsmith
),由于文件权限和所有权不正确,我无法编辑这些文件。
最终的结果是需要不断调整开发文件的所有权和权限。其他人肯定也有这个问题,但我看到的每一篇关于在开发工作流程中使用 Docker 的帖子都忽略了这个问题。
I do有一个解决方案,但我对此并不完全满意:
我在以下位置设置了一个文件夹/src/myproject
。这保存了我的开发文件,所有者为www-data:www-data
.
Using BindFS http://bindfs.org/,我安装/src/myproject
at ~/myproject
, 映射www-data:www-data
to jsmith:jsmith
。这允许我编辑文件~/myproject
无需搞乱权限。
Apache Docker 容器挂载/src/myproject
目录与-v /src/myproject:/var/www/html
。阿帕奇看到www-data
文件的所有权并且没有问题。
这运作良好,但似乎过于复杂。其他人如何解决这个问题?
我意识到我很可能为时已晚,但这可能对某人有帮助。
在你的 Dockerfile 中,你可以这样做:
RUN usermod -u 1000 www-data
RUN groupmod -g 1000 www-data
这在某些设置中可能有效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)