使用项目根目录下的 .env 文件统一管理全局变量是 docker compose 最轻量通用做法;它不侵入代码、不修改镜像,变量集中定义、一次生效,适用于本地开发与团队协作。

直接用项目根目录下的 .env 文件统一管理全局变量,是 Docker Compose 最轻量、最通用的做法。它不侵入代码、不修改镜像,所有变量集中定义、一次生效,适合本地开发和团队协作。
基础用法:单个 .env 文件自动加载
Docker Compose 默认会读取当前目录下的 .env 文件(无需显式声明),并将其中的变量用于替换 docker-compose.yml 中的 ${KEY} 占位符。
-
.env文件必须放在docker-compose.yml同级目录,且文件名严格为.env - 格式只能是
KEY=VALUE,等号两侧不能有空格,# 开头行为注释 - 变量只在 compose 解析阶段生效,不会自动注入容器运行环境 —— 容器内是否能访问,取决于你是否通过
environment或env_file显式传递
安全隔离:敏感变量单独拆出并限制权限
密码、密钥等不应出现在主 .env 中,推荐拆到独立文件(如 .env.secrets),再通过 env_file 引入。
- 在
docker-compose.yml中显式引用:env_file: [".env", ".env.secrets"] - 立即收紧文件权限:
chmod 600 .env.secrets,防止被其他用户读取 - 务必把
.env.secrets加入.gitignore;同时提交.env.secrets.example供新成员参考
多环境适配:按需组合不同 .env 文件
靠 env_file 列表顺序实现配置分层,后加载的同名变量自动覆盖前者,无需改代码就能切换环境。
- 常见结构:
.env.base(通用项)、.env.development(调试开关)、.env.production(生产密钥) - 开发环境 yml 片段:
env_file: ["./.env.base", "./.env.development"] - 生产环境 yml 片段:
env_file: ["./.env.base", "./.env.production"] - CI/CD 中可通过脚本动态生成或替换
env_file行,保持配置可审计
与 environment 字段协同使用
env_file 负责批量加载变量,environment 负责决定哪些变量真正透传进容器。两者配合,才能既灵活又可控。
- 只加载不透传:
env_file里的变量可用于 compose 文件内插值(如image: nginx:${NGINX_VERSION}),但不会进入容器 - 选择性透传:
environment中写- DB_PASSWORD=${DB_PASSWORD},才把该变量注入容器 - 避免硬编码:
environment中不要写- DB_PASSWORD=123456,应始终用${...}引用











