我有一个docker-compose文件的一部分
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
我的扩展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文件中,我有一个像这样的命令
# 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
我收到以下错误
无法构建:命令' / bin / sh -c chown -Rf www-data:www-data / $ APP_VOL_DIR'返回非零代码:1
我猜这是因为它没有$ APP_VOL_DIR,但是为什么这样如果docker compose正在扩展另一个定义的compose文件 环境:变量
答案 0 :(得分:2)
您可以使用build-time arguments。
在 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设置为构建参数:
pitchjob-fpm01:
container_name: pitchjob-fpm01
env_file:
- env/base.env
build:
context: ./pitch
dockerfile: PitchjobDockerfile
args:
- app_vol_dir=Sites
答案 1 :(得分:1)
我认为您的问题不在于覆盖,而在于您尝试进行环境变量替换的方式。来自文档:
注意:与shell表单不同,exec表单不会调用命令 贝壳。这意味着不会发生正常的shell处理。对于 例如,RUN [“echo”,“$ HOME”]不会进行变量替换 在$ HOME。如果你想要shell处理,那么要么使用shell表单 或直接执行shell,例如:RUN [“sh”,“ - c”,“echo $ HOME“]。