如何处理来自 docker 的卷内的权限?
How to handle permission inside a volume from docker?
我有一个容器 运行 一个 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
我 运行 docker OSX 使用 VirtualBox。
我也有这个问题。 Docker 机器在装载的卷上使用 docker
用户和 staff
组,它们分别具有 UID=1000
和 GID=50
。您需要修改您的 php-fpm
配置并替换默认用户(我想它是 nobody
),用户名在容器 UID=1000
中 。如果您没有这样的用户,则需要创建这样的用户。使用 GID=50
对组执行相同的技巧。这是非常非常肮脏的 hack,但我还没有找到更好的解决方案。
如果您使用的是 MacOSx。您必须更改员工用户的权限(该用户由 docker 创建)。默认员工用户只有读取权限。因此网络服务器无法写入 docker 容器中的缓存文件夹。你可以这样做,看看下面的图片
chmod -R 777 cache_folder 在你的 mac.
希望这个回答对你有用
无论如何,你也可以使用docker-machine-nfs来解决这个问题
MacOS 有一些安装问题,因为 user
和 group
拥有文件与 user
和 group
不同modifying/reading 文件。作为解决方法,请执行 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
(或为简单起见完整的 docker 工具箱)
更新 1:Docker for Mac Beta 处于私人邀请阶段。它在 xhyve Hypervisor 之上的 Mac 上本地运行 Docker。这意味着不再有权限错误并提高了性能。
更新 2:Docker for Mac 现在处于 Public 测试阶段。底层技术保持不变,VM 完全由 Docker 服务管理。撰写本文时的版本是 1.12.0-rc2
,它可以与 OS X 无缝协作,无需 docker-machine
.
的任何干预
在 eduardoleal/php56 图像的 Dockerfile EXPOSE 之前的某处添加 RUN usermod -u 1000 www-data
,它将解决权限问题。
我有一个容器 运行 一个 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
我 运行 docker OSX 使用 VirtualBox。
我也有这个问题。 Docker 机器在装载的卷上使用 docker
用户和 staff
组,它们分别具有 UID=1000
和 GID=50
。您需要修改您的 php-fpm
配置并替换默认用户(我想它是 nobody
),用户名在容器 UID=1000
中 。如果您没有这样的用户,则需要创建这样的用户。使用 GID=50
对组执行相同的技巧。这是非常非常肮脏的 hack,但我还没有找到更好的解决方案。
如果您使用的是 MacOSx。您必须更改员工用户的权限(该用户由 docker 创建)。默认员工用户只有读取权限。因此网络服务器无法写入 docker 容器中的缓存文件夹。你可以这样做,看看下面的图片
chmod -R 777 cache_folder 在你的 mac.
希望这个回答对你有用
无论如何,你也可以使用docker-machine-nfs来解决这个问题
MacOS 有一些安装问题,因为 user
和 group
拥有文件与 user
和 group
不同modifying/reading 文件。作为解决方法,请执行 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
(或为简单起见完整的 docker 工具箱)
更新 1:Docker for Mac Beta 处于私人邀请阶段。它在 xhyve Hypervisor 之上的 Mac 上本地运行 Docker。这意味着不再有权限错误并提高了性能。
更新 2:Docker for Mac 现在处于 Public 测试阶段。底层技术保持不变,VM 完全由 Docker 服务管理。撰写本文时的版本是 1.12.0-rc2
,它可以与 OS X 无缝协作,无需 docker-machine
.
在 eduardoleal/php56 图像的 Dockerfile EXPOSE 之前的某处添加 RUN usermod -u 1000 www-data
,它将解决权限问题。