假设我有一个运行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
所有权并没有问题。
这个方法很有效,但似乎过于复杂。其他人是如何解决这个问题的?