在参数中设置symfonycaching目录

我正在为Symfony应用程序构builddocker环境。 每个应用程序都有一个容器,其中包含链接到应用程序服务器的Web根目录的附加数据容器。 作为基础架构安全强化的一部分,这些数据容器被设置为只读,以防止任何远程代码被利用。 每个应用程序也有一个侧面的汽车容器,允许日志写入。

Symfony当前将caching写入默认的cache_dir位置

 ${web_root}/app/cache/${env} 

这是在只读数据容器中

当试图启动应用程序时,我得到这个错误

无法写入caching目录

很明显,因为它在只写容器中会发生

我已经设置了我的log_path设置在读写边车logging容器中的只读容器之外的参数

 /data/logs/symfony 

这工作正常。

我已经阅读了Symfony的食谱如何超越目录结构,但它只build议如何在AppKernal.php中做到这AppKernal.php ,我不想做的path可能会改变取决于如果它在local/uat/prod环境。

我们从我们的构build服务器提供Symfony不同的参数取决于我们正在部署的环境,所以把这个configuration放在这里是有道理的。

有没有人知道是否有可能重写caching目录在configuration而不是编辑AppKernal.php

我在容器外创buildcaching文件并使用-v将目录挂载到容器中

$ DIR是当前位置

htdocs在哪里web文件

 docker run -d \ -v $DIR/htdocs:/var/www/html \ -v $DIR/cache_folder:/var/www/html/app/cache 

然后确保容器被允许写入cache_folder 。 优点是,如果重新创build容器,则不会丢失任何数据。 这也将覆盖/var/www/html/app/cache文件夹

另一种可以做到这一点的方法是在每个容器内部,但是每次重启都会松开设置

 chmod -R 777 ${web_root}/app/cache/${env} 

下面是一个docker-compose yml文件的简化示例,它带有一个只读的父数据容器,带有2个边车容器,用于caching和logging:rw访问,覆盖与只读父path一起包含的path

搬运工-撰写-base.yml

 version: '2.0' # maintainer james.kirkby@sonyatv.com # @big narstie said "dont f*** up the #base" services: # web server pitchapp-web: hostname: pitchapp-web depends_on: - pitchapp-dc - pitchapp-log-sc - pitchapp-cache-sc - pitchapp-fpm volumes_from: - pitchapp-dc - pitchapp-log-sc:rw - pitchapp-cache-sc:rw links: - pitchapp-fpm build: args: - APP_NAME=pitchapp - FPM_POOL=pitchapp-fpm - FPM_PORT=9001 - PROJECT=pitch - APP_VOL_DIR=/data/www - CONFIG_FOLDER=app/config - ENVIRONMENT=dev - ENV_PATH=dev context: ./pitch dockerfile: Dockerfile ports: - "8181:80" extends: file: "shared/dev-common.yml" service: dev-common-env env_file: - env/dev.env # web data-container pitchapp-dc: volumes: - /data/tmp:/data/tmp:rw - /Sites/pitch/pitchapp:/data/www/dev/pitch/pitchapp/current:ro hostname: pitchapp-dc container_name: pitchapp-dc extends: file: "shared/data-container-common.yml" service: data-container-common-env read_only: true working_dir: /data/www # web cache sidecar pitchapp-cache-sc: volumes: - /data/cache/pitchapp:/data/www/dev/pitch/pitchapp/current/app/cache/dev:rw hostname: pitchapp-cache-sc container_name: pitchapp-cache-sc extends: file: "shared/data-container-common.yml" service: data-container-common-env read_only: false working_dir: /data/cache # web log sidecar pitchapp-log-sc: volumes: - /data/log/pitchapp:/data/log:rw - /data/log/pitchapp/symfony:/data/www/dev/pitch/pitchapp/current/app/logs:rw build: args: - APP_NAME=pitchapp - TARGET_SERVICE=pitchapp hostname: pitchapp-log-sc container_name: pitchapp-log-sc extends: file: "shared/logging-common.yml" service: logging-common-env 

数据容器common.yml

 version: '2.0' services: data-container-common-env: build: context: ./docker-data-container dockerfile: Dockerfile image: jkirkby91/docker-data-container env_file: - env/data.env restart: always privileged: false tty: false shm_size: 64M stdin_open: true 

测井common.yml

 version: '2.0' services: logging-common-env: build: context: ./logging dockerfile: Dockerfile image: jkirkby91/docker-data-container env_file: - env/logging.env restart: always working_dir: /data/log privileged: false tty: false shm_size: 64M stdin_open: true read_only: false