Docker-compose扩展没有find环境variables

我有一个docker-compose文件的一部分

泊坞窗,compose.yml

pitchjob-fpm01: container_name: pitchjob-fpm01 env_file: - env/base.env build: context: ./pitch dockerfile: PitchjobDockerfile volumes: - "/Sites/pitch/pitchjob/:/Sites" restart: always depends_on: - memcached01 - memcached02 links: - memcached01 - memcached02 extends: file: "shared/common.yml" service: pitch-common-env 

我扩展的XML文件是

compose.yml

 version: '2.0' services: pitch-common-env: environment: APP_VOL_DIR: Sites WEB_ROOT_FOLDER: web CONFIG_FOLDER: app/config APP_NAME: sony_pitch 

在pitchjob-fpm01的docker文件中,我有一个像这样的命令

PitchjobDockerfile

 # Set folder groups RUN chown -Rf www-data:www-data /$APP_VOL_DIR 

但是当我运行命令来调出堆栈

 docker-compose -f docker-compose-base.yml up --build --force-recreate --remove-orphans 

我得到以下错误

未能build立:命令'/ bin / sh -c chown -Rf www-data:www-data / $ APP_VOL_DIR'返回非零代码:1

我猜这是因为它没有$ APP_VOL_DIR,但为什么是这样,如果docker组成是扩展另一个定义环境的组成文件:variables

你可以使用构build时参数 。

Dockerfile中定义:

 ARG APP_VOL_DIR=app_vol_dir # Set folder groups RUN chown -Rf www-data:www-data /$APP_VOL_DIR 

然后在docker-compose.yml中将app_vol_dir设置为构build参数:

 pitchjob-fpm01: container_name: pitchjob-fpm01 env_file: - env/base.env build: context: ./pitch dockerfile: PitchjobDockerfile args: - app_vol_dir=Sites 

我认为你的问题不是覆盖,而是你试图做环境variablesreplace的方式。 从文档:

注意:与shellforms不同,execforms不会调用命令shell。 这意味着正常的shell处理不会发生。 例如,RUN [“echo”,“$ HOME”]不会在$ HOME上进行variablesreplace。 如果你想要shell处理,那么使用shell格式或者直接执行一个shell,例如:RUN [“sh”,“-c”,“echo $ HOME”]。