Docker-compose扩展无法查找环境变量

时间:2016-06-02 11:54:29

标签: docker docker-compose dockerfile

我有一个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  

我的扩展yml文件是

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

我收到以下错误

  

无法构建:命令' / bin / sh -c chown -Rf www-data:www-data   / $ APP_VOL_DIR'返回非零代码:1

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

2 个答案:

答案 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“]。