我正在开发一个项目,我正在使用docker来创建基本配置并扩展它。我的base docker-compose.yml文件有links
,所以我不能在扩展的compose文件中使用extends
param。相反,我正在为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
文件的干净方法是什么?
个人对我有用并且很安静的是我在所有项目的根目录下都有一个空的docker-compose文件,我需要在它们之间进行交叉引用,并始终将其设置为所有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/
然后我有一些批处理/ powershell文件调用docker-compose,例如:
/** 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