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

Ale*_*nov 2 php permissions caching symfony docker

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

  1. 交响乐团
  2. nginx
  3. php-fpm
  4. 雷迪斯

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

我遇到了一些奇怪的文件夹权限问题,并且收到此错误: 错误屏幕截图

我的 Symfony 可以创建文件夹

/var/www/var/chache 
Run Code Online (Sandbox Code Playgroud)

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

10344 drwxr-xr-x 1 1000 staff    68 Apr 15 00:33 cache
Run Code Online (Sandbox Code Playgroud)

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

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

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

在 config.yml 中:

twig:
    cache:        false
Run Code Online (Sandbox Code Playgroud)

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

有什么想法如何解决问题吗?

ash*_*rov 5

您还没有向您展示 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
Run Code Online (Sandbox Code Playgroud)

  • 请您添加一个解释。所以 `usermod` 将 `www-data` 用户的 ID 设置为 `1000`,是吗?这对解决这里的权限问题有何帮助?谢谢。 (3认同)