【问题标题】:Unable to create the storage directory every time I clear the cache inside docker container每次我清除 docker 容器内的缓存时都无法创建存储目录
【发布时间】:2019-05-04 03:42:19
【问题描述】:

我正在使用 docker 处理 Symfony 3.4 应用程序。 问题是我进入容器后做

php bin/console cache:clear

我总是有这个缓存问题:

Unable to create the storage directory (/var/www/app/var/cache/dev/profiler).

我知道我可以通过以下方式解决它:

chmod 777 -R var/cache/* var/logs/*

但是我再次清除缓存后,问题仍然存在。 有办法只添加一次权限,清除缓存后这个问题就解决了吗?

谢谢。

【问题讨论】:

    标签: php symfony docker caching


    【解决方案1】:

    确保在 Dockerfile 中创建 Symfony 所需的缓存目录并为其设置正确的权限:

    USER root
    # RUN usermod -u 1000 www-data    # fix the UID
    RUN mkdir -p var/cache/prod var/cache/dev var/cache/test var/log \
       && chown -R www-data:www-data var/ \
       && chmod -R ug+rwX var/
    

    然后重建您的图像,默认情况下var 的权限应该没问题,www-data 应该能够写入缓存?

    【讨论】:

      【解决方案2】:

      有几种方法可以解决这个问题。就我个人而言,我使用我在本地使用的同一用户来运行我的开发 docker 容器。

      所以所有文件都只属于一个 uid(在我的情况下为 1000)

      另一种解决方法是在 /var/cache 上设置 ACL 标志,以便在创建时自动继承目录权限。此处对此进行了描述:https://symfony.com/doc/3.4/setup/file_permissions.html

      【讨论】:

      • 我不确定如何在 docker 文件中添加它。目前我有: # 设置卷和生成的目录的权限 chown -R www-data:www-data /var/www/app/var/cache/ &> /dev/null chown -R www-data:www-数据 /var/www/app/var/logs/ &> /dev/null chown -R www-data:www-data /var/www/app/var/sessions/ &> /dev/null chown -R www-数据:www-data /var/www/app/vendor/ &> /dev/null
      • 只需使用USER 指令。也许您需要先创建一个新用户。
      • 你想要一个包含所有代码的开发设置还是一个生产就绪的图像?`
      • 能分享一下 Dockerfile 和 docker-compose.yml 吗?
      • 我不想在每次清除 docker 容器中的缓存时都设置缓存/日志权限。
      猜你喜欢
      • 2017-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-02
      • 1970-01-01
      相关资源
      最近更新 更多