如何让Docker Compose从自定义路径读取环境变量
解决方案
Docker Compose 提供了两种原生方式,让你从自定义路径加载用于 docker-compose.yml 模板替换的环境变量,无需依赖 source 命令:
1. 命令行参数指定(临时测试用)
直接在启动命令中用 --env-file 参数指定自定义环境文件路径,支持多个文件(重复参数即可):
docker compose --env-file ./envs/.compose_envs.yml --env-file ./envs/.django_envs.yml up -d
2. 持久化配置(无需每次加参数)
如果希望直接用 docker compose up 启动,可通过以下两种方式设置:
方式A:设置终端/系统环境变量
在终端中设置 COMPOSE_ENV_FILES 环境变量,指定所有自定义环境文件的路径(Linux/macOS 用冒号分隔,Windows 用分号):
# Linux/macOS export COMPOSE_ENV_FILES="./envs/.compose_envs.yml:./envs/.django_envs.yml" # Windows PowerShell $env:COMPOSE_ENV_FILES = ".\envs\.compose_envs.yml;.\envs\.django_envs.yml"
如果需要永久生效,可将上述命令添加到你的 shell 配置文件(如 ~/.bashrc、~/.zshrc)中。
方式B:项目根目录创建引导.env文件
在项目根目录创建一个 .env 文件(仅用于告诉 Compose 去哪里找自定义环境文件),内容如下:
COMPOSE_ENV_FILES=./envs/.compose_envs.yml:./envs/.django_envs.yml
Docker Compose 启动时会自动读取根目录的 .env,然后根据这个变量加载指定路径下的环境文件,之后你直接执行 docker compose up 即可。
注意事项
- 你命名的
.compose_envs.yml和.django_envs.yml文件,内容必须是shell 风格的键值对(不是 YAML 格式),例如:POSTGRES_DB=my_database POSTGRES_USER=admin COMPOSE_ENV_FILES指定的文件优先级高于根目录默认的.env,如果有重复变量,后者会被前者覆盖。
内容的提问来源于stack exchange,提问作者ruslaniv
相关产品推荐
相关产品推荐

