gpt4 book ai didi

docker - 多个 docker compose 文件,指定了 env_file

转载 作者:行者123 更新时间:2023-12-02 18:07:50 27 4
gpt4 key购买 nike

我正在开发一个项目,在该项目中我使用 docker 创建基本配置并对其进行扩展。我的基本 docker-compose.yml 文件有 links,所以我不能在扩展 compose 文件中使用 extends 参数。相反,我将多个 docker-compose 文件指定给 docker-compose 工具。

这运行良好,除了似乎 .env 文件的路径总是相对于指定的第一个 docker-compose.yml 文件,这破坏了我的预期功能。

例子:

docker-compose.yml(位于一个公共(public)位置,比方说 ~/base-app)

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

现在在一个子应用程序中,我想指定一个命令env_file:

docker-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 文件,并且始终将其设置为第一个 -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

关于docker - 多个 docker compose 文件,指定了 env_file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34245240/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com