在Dockerfile

时间:2016-06-11 08:34:32

标签: php apache docker

我使用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
...

问题是,这没有任何结果:

  • 测试脚本为umask提供了18个
  • 仍然使用错误的权限创建
  • 文件夹
  • 子文件夹无法创建。

问题:

我做错了什么?

如何将docker容器中的umask设置为零?

如何允许apache-user(www-data)创建始终具有写权限且可以创建子文件夹的文件夹?

2 个答案:

答案 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