我正在为 Symfony 应用程序构建一个 docker 环境。我为每个应用程序有一个容器,并为链接到应用程序服务器的 Web 根目录附加了一个仅包含数据的容器。作为基础设施安全强化的一部分,这些数据容器被设置为只读,以防止任何远程代码利用。然后,每个应用程序还有一个允许写入日志的边车容器。
Symfony 当前将缓存写入到默认的 cache_dir
位置
${web_root}/app/cache/${env}
在只读数据容器中
尝试启动应用程序时出现此错误
Unable to write in the cache directory
很明显,因为它在只写容器中,所以会发生这种情况
我已经设置我的log_path是在read-write sidecar logging container中的只读容器外的parameters中设置的
/data/logs/symfony
效果很好。
我已经阅读了关于如何覆盖目录结构的 Symfony 食谱,但它只建议如何在 AppKernal.php
中执行此操作,我不想这样做,因为路径可能更改取决于它是否在 local/uat/prod
环境中。
我们根据要部署的环境从构建服务器向 Symfony 提供不同的参数,因此将此配置放在这里是有意义的。
有谁知道是否可以覆盖配置中的缓存目录而不是编辑 AppKernal.php
最佳答案
我在容器外部创建缓存文件并使用-v
将目录挂载到容器中
$DIR 是当前位置
网页文件所在的 htdocs
docker run -d \
-v $DIR/htdocs:/var/www/html \
-v $DIR/cache_folder:/var/www/html/app/cache
然后确保允许容器写入 cache_folder
。优点是如果您重新创建容器,您不会丢失任何数据。这也将覆盖文件夹 /var/www/html/app/cache
另一种方法是在每个容器中执行此操作,但每次重新启动时都会松开设置
chmod -R 777 ${web_root}/app/cache/${env}
关于php - 在参数中设置 symfony 缓存目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37723506/