如何从docker处理卷内的权限?

时间:2016-03-17 18:07:44

标签: 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
    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。

4 个答案:

答案 0 :(得分:2)

我也有这个问题。 Docker计算机在已装入的卷上使用docker用户和staff组,这些卷分别具有UID=1000GID=50。您需要修改您的php-fpm配置,并使用在容器中有nobody 的用户名替换默认用户(我认为它是UID=1000)。如果您没有此类用户,则需要创建此类用户。使用GID=50为群组执行相同的操作。这是非常非常糟糕的黑客,但我还没有找到更好的解决方案。

答案 1 :(得分:2)

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

你的mac上的chmod -R 777 cache_folder。

希望这个答案对你有用

enter image description here

无论如何,你也可以使用docker-machine-nfs解决这个问题

答案 2 :(得分:2)

MacOS存在一些问题,因为usergroup拥有文件与usergroup修改/读取文件的区别。作为解决方法,请执行以下(最好使用最新版本)的Docker,

$ brew install docker-machine-nfs
$ docker-machine start yourdockermachine
$ docker-machine-nfs yourdockermachine --shared-folder=/Users --nfs-config="-alldirs -maproot=0"

您可以根据需要更改yourdockermachine的名称。此外,您还可以更改要映射的共享文件夹。以上选项是最好的选择,适用于所有情况。我建议不要改变它,这样你就不会乱用系统文件。

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

注意:上述程序的依赖关系为brewdocker-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中,它将修复权限问题。