多个docker组合文件,指定了env_file

时间:2015-12-12 21:32:47

标签: docker environment-variables dockerfile docker-compose

我正在开展一个项目,我正在使用docker创建基本配置并对其进行扩展。我的基本docker-compose.yml文件有links,因此我无法在扩展撰写文件中使用extends参数。相反,我正在为docker-compose工具指定多个docker-compose文件。

这很好用,除了看起来.env文件的路径总是相对于指定的第一个docker-compose.yml文件,这会破坏我的预期功能。

示例:

docker-compose.yml (住在一个公共位置,让我们说~/base-app

web:
  build: .
  volumes:
    - .:/usr/src/app
  ports:
    - "80:3000"
  links:
    - redis
redis:
  image: redis:latest
  ports:
    - "6379:6379"

现在在儿童应用中,我想指定commandenv_file

搬运工-compose.override.yml

web:
  environment:
    NODE_ENV: development
  env_file: .env
  command: node server.js

当我运行此设置时,我将使用以下命令:

docker-compose -f ~/base-app/docker-compose.yml -f docker-compose.override.yml up

这很有效,只要我没有指定env_file。但是如果指定了env_file,我会收到如下错误:

ERROR: Couldn't find env file: ~/base-app/.env

阅读docker-compose docs,它表示使用-f标志时env文件路径相对于docker-compose文件。

我错过了什么,或者这是一个错误?相对于覆盖docker-compose文件使用.env文件的干净方法是什么?

1 个答案:

答案 0 :(得分:0)

对我个人而言,让我感到高兴的是,我在需要交叉引用的所有项目的根目录中都有一个空的docker-compose文件,并将其始终设置为第一个-f撰写命令,并更改了我所有的撰写文件,以使用相对于我的第一个撰写文件所在的解决方案/源根目录的相对路径。

/src <- root
/src/docker-compose.yml <- empty docker-compose file only specifying version
/src/api/docker-compose.yml <- docker-compose file using paths relative from /src/
/src/web/docker-compose.yml <- docker-compose file using paths relative from /src/

然后我有了一些调用docker-compose的批处理/ powershell文件,例如:

/** docker-compose-re-up.bat **/
docker-compose -f ../docker-compose.yml -f docker-compose.yml down
docker-compose -f ../docker-compose.yml -f docker-compose.yml build
docker-compose -f ../docker-compose.yml -f docker-compose.yml up -d