我正在使用Mac,最近我尝试用docker建立一个开发环境。Docker似乎不错,但目前我面临着以下问题:
问题:
每当PHP (在docker容器中)创建带有子文件夹的文件夹时,apache就会导致一个500错误。Apache-log:“.无法创建目录app/.././文件夹/子文件夹/子文件夹/”
我假设这是由环境变量umask造成的,因为每当创建文件夹时,它都没有写权限。因此,无法创建子文件夹,依此类推。
为了测试这一点,我编写了一个小的test-script (umask-test.php):
$umask = umask(0);
echo ("umask = $umask <br>");还有宾果!每次构建和运行容器并通过浏览器启动脚本时,结果是:
umask = 18目标:
所以我希望umask总是被设置为000 (0)
我认为,设置这个变量的最佳位置应该是Dockerfile,因此在Dockerfile中,我声明如下:
FROM ubuntu:trusty
...
ENV UMASK 0
...问题是,这没有任何结果:
问题:
我做错了什么?
在码头集装箱中,如何将umask设置为零?
如何允许apache用户(www-data)创建始终具有写权限的文件夹以及可以在其中创建子文件夹?
发布于 2016-06-11 15:01:18
问题求解
由于希望这对其他人有所帮助,我想就我自己的问题提供答案:
问题不在于容器中的对接器和umask设置。问题是Mac 上的Mac和umask设置!!
示例:如果Mac上的umask设置为022,那么由docker在挂载目录上创建的文件夹具有755的权限。这会导致无法创建子文件夹。
此链接提供有关如何为Mac:https://support.apple.com/en-us/HT201684设置umask的信息。
所以如果你输入你的终端
sudo launchctl config user umask 000重新启动时,您的所有文件夹都将使用777权限创建。包括安装到停靠点的文件夹。
在我问自己为什么运行容器之前(用运行-v初始化.)不是真的起作用。现在看来一切正常!-)
发布于 2016-06-11 08:55:25
根据您用ENV设置的Docker环境变量,确实会持久化到正在运行的容器中,但是Apache可能非常挑剔它在启动时从安全角度关注哪些变量。
试试this answer。
https://stackoverflow.com/questions/37761693
复制相似问题