我正在为Symfony应用程序构建一个docker环境。每个应用程序都有一个容器,其中包含一个仅附加数据的容器,用于链接到应用程序服务器的Web根目录。作为基础结构安全加固的一部分,这些数据容器设置为只读,以防止任何远程代码利用。然后每个应用程序还有一个侧车容器,允许写入日志。
Symfony目前将缓存写入
的默认from zip import ZipFile
for name in ZipFile('zipfile.zip').namelist():
print('Listing zip files: %s' % name)
位置
cache_dir
哪个位于只读数据容器中
尝试启动应用程序时出现此错误
无法写入缓存目录
显然,它只在写入容器中才会发生
我设置我的log_path是在读写边车日志记录容器中的只读容器外的参数中设置的
${web_root}/app/cache/${env}
工作正常。
我已经阅读了关于如何覆盖目录结构的Symfony食谱,但它只建议如何在/data/logs/symfony
中执行此操作,我不想这样做,因为路径可能会改变,取决于它是否在AppKernal.php
环境中。
我们根据我们正在部署的环境从构建服务器提供Symfony不同的参数,因此将此配置放在此处是有意义的。
是否有人知道是否可以覆盖配置中的缓存目录而不是编辑local/uat/prod
答案 0 :(得分:3)
我在容器外部创建缓存文件,并使用-v
将目录挂载到容器中
$ DIR是当前位置
网页文件
的htdocsdocker 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}
答案 1 :(得分:1)
这是我正在使用的docker-compose yml文件的简化示例,其中包含一个带有2个sidecar容器的只读父数据容器,用于缓存和记录:rw访问覆盖了只读的路径父路径
搬运工-撰写-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