如何处理来自docker的卷内的权限?

我有一个运行PHP应用程序的容器, php-fpm服务无法将caching文件写入泊坞窗提供的文件夹中。

我从主机上给我需要写的文件夹777权限,但是它只工作了一段时间。 由php-fpm创build的文件没有必要的权限。 此外,用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。

由于usergroup拥有文件与usergroup修改/读取文件的不同,MacOS有一些安装问题。 作为解决方法,请执行以下(最好使用最新版本)的Docker,

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

您可以随意更改yourdockermachine的名称。 另外,您还可以更改要映射的共享文件夹。 以上选项是最好的select,适用于所有情况。 我build议不要改变这个,这样你就不会搞乱系统文件。

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

注意 :以上过程的依赖关系是brewdocker-machine (或者为了简单起见,完整的docker工具箱)

更新1 : Docker for Mac Beta处于私人邀请阶段。 它在xhyve Hypervisor之上的Mac上本地运行Docker。 这意味着,没有更多的权限错误和改进的性能。

更新2 : 适用于Mac的Docker现在处于公共testing版。 底层技术保持不变,虚拟机完全由Docker服务pipe理。 本文撰写的版本是1.12.0-rc2 ,它可以与OS X无缝连接,无需1.12.0-rc2 docker-machine

我也有这个问题。 Docker机器在已安装的卷上使用docker用户和staff组,分别具有UID=1000GID=50 。 你需要修改你的php-fpmconfiguration,并用容器内的 UID=1000用户名replace默认的用户(我猜这是nobody )。 如果你没有这样的用户,你需要创build这样的用户。 对于GID=50团队也是这样做的。 这是非常非常肮脏的黑客,但我没有find更好的解决scheme呢。

如果您正在使用MacOSx。 你必须改变职员用户的权限(这个用户是由docker创build的)。 默认员工只能读取权限。 所以Web服务器无法写入您的caching文件夹容器中的caching文件夹。 你可以做,看到下面的图片

chmod -R 777 cache_folder在你的mac上。

希望这个答案对你有用

在这里input图像说明

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

添加RUN usermod -u 1000 www-data在EXPOSE到eduardoleal / php56映像的Dockerfile之前的某处,它将修复权限问题。