我使用Mac OS,最近我尝试使用docker设置开发环境。 Docker似乎很好,但目前我遇到了以下问题:
问题:
每当PHP(在docker容器中)创建带有子文件夹的文件夹时,apache就会导致500错误。 Apache-log:" ...无法创建目录app /../../文件夹/子文件夹/子文件夹/"
我认为这是由环境变量 umask 引起的,因为无论何时创建文件夹,它都没有写入权限。因为不能创建子文件夹等等。
为了测试这个,我写了一个小测试脚本(umask-test.php):
$umask = umask(0);
echo ("umask = $umask <br>");
和宾果!每次我构建并运行容器并通过浏览器启动脚本时,结果是:
umask = 18
目标:
所以我希望 umask 始终设置为 000(零)
我想,设置此变量的最佳位置是Dockerfile,所以在Dockerfile中我说了以下内容:
FROM ubuntu:trusty
...
ENV UMASK 0
...
问题是,这没有任何结果:
问题:
我做错了什么?
如何将docker容器中的umask设置为零?
如何允许apache-user(www-data)创建始终具有写权限且可以创建子文件夹的文件夹?
答案 0 :(得分:3)
问题已解决
由于希望这对其他人有帮助,我想提供自己问题的答案:
问题不在于容器中的docker和umask-settings。问题是Mac和Mac OS上的 umask设置 !!
示例:如果Mac上的umask设置为022,则docker在已安装目录上创建的文件夹具有权限755.这会导致无法创建子文件夹。
此链接提供有关如何为Mac设置umask的信息:https://support.apple.com/en-us/HT201684
所以如果你输入你的终端
sudo launchctl config user umask 000
并重新启动,将使用777权限创建所有文件夹。 包括挂载到docker的文件夹。
在我问自己之前为什么运行容器(使用run -v初始化...)并没有真正起作用。现在它似乎工作得很好! : - )
答案 1 :(得分:0)
根据您使用ENV设置的Docker docs环境变量确实持久保存到正在运行的容器,但Apache可能非常挑剔它在启动时注意哪些安全性。
尝试this answer。