我正在开展一个项目,我正在使用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"
现在在儿童应用中,我想指定command
和env_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
文件的干净方法是什么?
答案 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