在Docker环境中运行Symfony时的文件夹权限


Folder permissions when running Symfony in Docker environment

我正在OSX上运行Docker容器。集装箱包括:

  1. Symfony
  2. Nginx
  3. php fpm
  4. Redis

这是运行Symfony应用程序的一种非常常见的设置。

我遇到了一些奇怪的文件夹权限问题,出现了以下错误:错误屏幕截图

我的Symfony可以创建一个文件夹

/var/www/var/chache 

但它无法写入其中。创建缓存文件夹后,文件夹权限设置为:

10344 drwxr-xr-x 1 1000 staff    68 Apr 15 00:33 cache

该文件夹的所有者是我的本地OSX用户,Docker在该用户下运行。我曾尝试在Docker中从Symfony的CLI更改文件夹权限或所有者,但没有效果。我尝试在本地控制台下chmod -R 777,权限被更改,但Symfony在缓存文件夹中创建了文件夹,无法再次写入。

我还尝试禁用app_dev.php:中的缓存

$kernel = new AppKernel('dev', true); 
// $kernel->loadClassCache();
$request = Request::createFromGlobals();

在config.yml:中

twig:
    cache:        false

没有任何效果,所以我迷失在这里。

有什么想法可以解决问题吗?

您没有向您展示Dockerfile,因此我可以给您举一个使用PHP-FPM的容器的例子,其中解决了这个问题:

此行正在修复权限错误:usermod -u 1000 www-data

FROM debian:jessie  
RUN apt-get update
RUN apt-get install -y curl '
                       mcrypt '
    && apt-get install -y php5 '
                       php5-fpm '
                       php5-cli '
                       php-pear '
                       php5-common '
                       php5-igbinary '
                       php5-json '
                       php5-mysql '
                       php5-mysqlnd '
                       php5-gd '
                       php5-curl '
                       php5-dev '
                       php5-sqlite '
                       php5-memcached '
                       php5-memcache '
    && usermod -u 1000 www-data
EXPOSE 9000

请查看此处的官方文档。

我在ubuntu上,为了解决权限问题,我执行以下命令:

$ sudo setfacl -R -m u:www-data:rwx -m u:`whoami`:rwx app/cache app/logs
$ sudo setfacl -dR -m u:www-data:rwx -m u:`whoami`:rwx app/cache app/logs