2

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

4 回答 4

4

由于文件的拥有权与user修改/读取文件的差异,MacOS 存在一些安装问题。作为一种解决方法,请执行以下 Docker(最好使用最新版本),groupusergroup

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

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

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

注意:上述过程的依赖项是brewdocker-machine(或完整的 docker 工具箱为简单起见)

更新 1Docker for Mac Beta处于私人邀请阶段。它在xhyve Hypervisor之上在 Mac 上本地运行 Docker 。这意味着不再有权限错误并提高性能。

更新 2Docker for Mac现在处于公开测试阶段。底层技术保持不变,VM 完全由 Docker 服务管理。撰写本文时的版本1.12.0-rc2与 OS X 无缝协作,无需任何docker-machine.

于 2016-03-21T05:44:36.397 回答
3

我也有这个问题。Docker 机器在已安装的卷上使用docker用户和组,它们分别具有和。您需要修改您的配置并将默认用户(我想是)替换为具有内部容器的用户名。如果您没有此类用户,则需要创建此类用户。对 group 做同样的技巧。这是非常非常肮脏的黑客,但我还没有找到更好的解决方案。staffUID=1000GID=50php-fpmnobodyUID=1000 GID=50

于 2016-03-18T19:31:08.543 回答
2

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

chmod -R 777 cache_folder 在你的 Mac 上。

希望这个答案对你有用

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

于 2016-03-19T17:01:09.470 回答
2

在 eduardoleal/php56 图像的 Dockerfile 中添加RUN usermod -u 1000 www-dataEXPOSE 之前的某个位置,它将解决权限问题。

于 2016-03-21T13:03:23.510 回答