我有一个运行PHP应用程序的容器,而php-fpm
服务无法将缓存文件写入docker卷提供的文件夹中。
我从主机上获得了我需要写入的文件夹的777权限,但它只运行了一段时间。 php-fpm
创建的文件没有必要的权限。
此外,无法使用chown
命令更改所有者和组。
这是我的docker-composer.yml
文件:
web:
image: eduardoleal/nginx
external_links:
- proxy
links:
- php:php
container_name: "app-web"
environment:
VIRTUAL_HOST: web.app
volumes_from:
- data
volumes:
- ./src/nginx-vhost.conf:/etc/nginx/sites-enabled/default
php:
image: eduardoleal/php56
container_name: "app-web-php"
volumes_from:
- data
data:
container_name: "app-web-data"
image: phusion/baseimage
volumes:
- /Users/eduardo.leal/Code/vidaclass/web:/var/www/public
我正在使用VirtualBox在OSX上运行docker。
答案 0 :(得分:2)
我也有这个问题。 Docker计算机在已装入的卷上使用docker
用户和staff
组,这些卷分别具有UID=1000
和GID=50
。您需要修改您的php-fpm
配置,并使用在容器中有nobody
的用户名替换默认用户(我认为它是UID=1000
)。如果您没有此类用户,则需要创建此类用户。使用GID=50
为群组执行相同的操作。这是非常非常糟糕的黑客,但我还没有找到更好的解决方案。
答案 1 :(得分:2)
如果您使用的是MacOSx。您必须更改员工用户的权限(此用户由docker创建)。默认员工用户只读权限。因此,webserver无法写入docker容器中的缓存文件夹。你可以看到下面的图片
你的mac上的chmod -R 777 cache_folder。
希望这个答案对你有用
无论如何,你也可以使用docker-machine-nfs解决这个问题
答案 2 :(得分:2)
MacOS存在一些问题,因为user
和group
拥有文件与user
和group
修改/读取文件的区别。作为解决方法,请执行以下(最好使用最新版本)的Docker,
$ brew install docker-machine-nfs
$ docker-machine start yourdockermachine
$ docker-machine-nfs yourdockermachine --shared-folder=/Users --nfs-config="-alldirs -maproot=0"
您可以根据需要更改yourdockermachine
的名称。此外,您还可以更改要映射的共享文件夹。以上选项是最好的选择,适用于所有情况。我建议不要改变它,这样你就不会乱用系统文件。
完成上述设置后,请确保为文件和文件夹提供适当的读取,写入和执行权限。
注意:上述程序的依赖关系为brew
,docker-machine
(或简称为完整的泊坞工具箱)
更新1 :Docker for Mac Beta处于私人邀请阶段。它在 xhyve Hypervisor 之上在Mac上本地运行Docker。这意味着,没有更多的权限错误和改进的性能。
更新2 :Docker for Mac现已进入公开测试阶段。底层技术保持不变,VM完全由Docker服务管理。撰写本文时的版本为1.12.0-rc2
,可与OS X无缝协作,无需docker-machine
的任何干预。
答案 3 :(得分:2)
在EXPOSE之前的某处将RUN usermod -u 1000 www-data
添加到用于eduardoleal / php56映像的Dockerfile中,它将修复权限问题。