Php 如何处理docker在卷内的权限?

Php 如何处理docker在卷内的权限?,php,docker,file-permissions,docker-compose,mounted-volumes,Php,Docker,File Permissions,Docker Compose,Mounted Volumes,我有一个运行PHP应用程序的容器,PHP fpm服务无法在docker卷提供的文件夹中写入缓存文件 我从主机上对需要写入的文件夹授予了777权限,但它只能工作一段时间。由php fpm创建的文件没有必要的权限。 此外,不能使用chown命令更改所有者和组 这是我的docker composer.yml文件: web: image: eduardoleal/nginx external_links: - proxy links: - php:

我有一个运行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。

我也有这个问题。Docker machine在装入的卷上使用
Docker
用户和
staff
组,分别具有
UID=1000
GID=50
。您需要修改您的
php fpm
配置,并将默认用户(我假设它是
nobody
)替换为容器内部具有
UID=1000
的用户名。如果您没有这样的用户,则需要创建这样的用户。对GID=50的组执行相同的技巧。这是一个非常非常肮脏的黑客行为,但我还没有找到更好的解决方案。

我也有这个问题。Docker machine在装入的卷上使用
Docker
用户和
staff
组,分别具有
UID=1000
GID=50
。您需要修改您的
php fpm
配置,并将默认用户(我假设它是
nobody
)替换为容器内部具有
UID=1000
的用户名。如果您没有这样的用户,则需要创建这样的用户。对GID=50的组执行相同的技巧。这是非常非常肮脏的黑客行为,但我还没有找到更好的解决方案。

如果您使用的是MacOSx。您必须更改staff用户的权限(此用户由docker创建)。默认员工用户只读权限。因此,Web服务器无法写入docker容器中的缓存文件夹。你可以这样做,并看到下面的图片

chmod-R 777在mac上缓存\u文件夹

希望这个答案对你有用


无论如何,如果您使用MacOSx,也可以使用docker machine nfs来解决此问题。您必须更改staff用户的权限(此用户由docker创建)。默认员工用户只读权限。因此,Web服务器无法写入docker容器中的缓存文件夹。你可以这样做,并看到下面的图片

chmod-R 777在mac上缓存\u文件夹

希望这个答案对你有用


无论如何,您也可以使用docker machine nfs解决此问题

MacOS存在一些安装问题,因为拥有文件的
用户
用户
修改/读取文件之间存在差异。作为解决方法,请执行以下Docker操作(最好使用最新版本):

$ brew install docker-machine-nfs
$ docker-machine start yourdockermachine
$ docker-machine-nfs yourdockermachine --shared-folder=/Users --nfs-config="-alldirs -maproot=0"
您可以随意更改DockerMachine的名称。此外,您还可以更改要映射的共享文件夹。以上选项是最佳选择,在所有情况下都有效。我建议不要更改它,这样就不会弄乱系统文件

完成上述设置后,请确保为文件和文件夹提供适当的读、写、执行权限

注意:上述过程的依赖项为
brew
docker machine
(或完整的docker工具箱,以方便使用)

更新1:处于私人邀请阶段。它在Mac上以本机方式运行Docker,并在xhyve Hypervisor上运行。这意味着,不再有权限错误,性能也得到了提高


更新2:现在是公开测试版。底层技术保持不变,VM完全由Docker服务管理。撰写本文时的版本是
1.12.0-rc2
,它与OS X无缝工作,无需
docker machine
的任何干预由于
用户
拥有文件与
用户
修改/读取文件之间的差异,MacOS存在一些安装问题文件作为解决方法,请执行以下Docker操作(最好使用最新版本):

$ brew install docker-machine-nfs
$ docker-machine start yourdockermachine
$ docker-machine-nfs yourdockermachine --shared-folder=/Users --nfs-config="-alldirs -maproot=0"
您可以随意更改DockerMachine的名称。此外,您还可以更改要映射的共享文件夹。以上选项是最佳选择,在所有情况下都有效。我建议不要更改它,这样就不会弄乱系统文件

完成上述设置后,请确保为文件和文件夹提供适当的读、写、执行权限

注意:上述过程的依赖项为
brew
docker machine
(或完整的docker工具箱,以方便使用)

更新1:处于私人邀请阶段。它在Mac上以本机方式运行Docker,并在xhyve Hypervisor上运行。这意味着,不再有权限错误,性能也得到了提高


更新2:现在是公开测试版。底层技术保持不变,VM完全由Docker服务管理。撰写本文时的版本是
1.12.0-rc2
,它与OS X无缝工作,无需任何
docker机器的干预

添加
在暴露到Dockerfile for eduardoleal/php56图像之前的某个地方运行usermod-u 1000 www-data
,它将修复权限问题。

添加
运行usermod-u 1000 www-data
在公开到eduardoleal/php56图像的Dockerfile之前的某个地方,它将修复权限问题。

现在我可以解决以下要点:。但我认为这是一个快速解决方案。这是一篇旧帖子,对于较新的系统,我已经添加了一个答案。现在我可以解决以下要点:。但我认为这是一个快速解决方案。这是一篇旧帖子,对于更新的系统,我已经添加了一个答案。谢谢你的答案!!工作得很好@埃杜阿