首页/云/Docker 容器速查/compose env_file 字段
Compose 编排55 条

compose env_file 字段

把变量文件注入容器:适合为数据库连接等成组配置集中取值,可指定多个文件,后面的文件优先级更高。

Docker 容器速查云更新于 2026-10-13

compose env_file 是什么

env_file 让服务从文件里读取环境变量,按「每行一个键值对」的格式注入容器。它适合把成组配置集中存放,例如数据库连接参数、日志级别、第三方凭据;相比在编排文件里逐条写 environment,把变量放文件更便于按环境替换与权限控制。多个文件可以叠加,靠后的文件优先。

基本信息

写法env_file: 路径 或列表形式 - 文件A - 文件B
文件格式KEY=value 每行一条,可用 # 注释
优先级后面的文件覆盖前面的;environment 中显式写的再覆盖其上
路径基准相对项目目录(编排文件所在目录)
与 .env 区别env_file 注入容器;.env 只供编排文件插值
安全性文件应加入版本控制忽略清单,仓库里只放示例文件

典型使用场景

  • 多个服务共用一份公共配置,再各自追加差异文件
  • 按环境拆分配置:开发、预发、生产各一份变量文件
  • 把凭据留在部署机上单独管理,不进代码仓库
  • 迁移服务时集中替换连接参数,不用逐条改编排文件
  • 排查变量来源:结合 environment 与插值确认最终取值

编排文件写法

编排文件写法
services:
  api:
    image: app/api:1.4.2
    env_file:
      - .env.common          # 公共配置:日志、时区等
      - .env.api             # 服务专属配置,同名键覆盖前者
    environment:
      LOG_LEVEL: debug       # 显式声明优先级最高,便于临时调整

变量文件与验证

变量文件与验证
# 变量文件示例(每行一个键值对,注意不要有多余空格与引号习惯差异)
 cat > .env.api <<'EOF'
# 数据库连接
DB_HOST=db
DB_PORT=5432
DB_NAME=appdb
EOF

# 渲染最终配置,确认变量已按预期合并(注意避免把敏感值输出到公开渠道)
docker compose config | sed -n '1,60p'

# 运行后核对容器内实际环境变量
docker compose up -d api
docker compose exec api env | sort | head -30

变量来源优先级

来源作用对象优先级
shell 环境变量编排文件插值最高
项目 .env编排文件插值中
env_file 声明顺序容器环境变量后声明的更高
environment 字段容器环境变量高于 env_file
镜像内 ENV容器默认值最低
两种变量的职责要分清:编排文件里的插值(读取项目级 .env 或 shell 环境)决定 Compose 如何渲染配置,env_file 决定容器里有什么环境变量,互不替代。
把含有口令的变量文件提交进代码仓库是常见事故。文件名加入忽略清单,仓库中只保留不含真实值的示例文件,并对部署机上的文件设置较严格权限。

易错点

  • 把 env_file 与项目级 .env 混为一谈,容器里读不到变量时先确认走的是哪条链路
  • 变量文件里键值写法不规范(多余空格、引号处理不同),取值与预期不一致,先渲染配置核对
  • 文件路径按当前工作目录解析而非编排文件目录,在别的目录执行命令时读不到文件
  • 把凭据文件提交进版本库,密钥随代码扩散,清理历史成本极高

数据来源与参考

  • Docker 官方文档:Compose env_file 参考(docs.docker.com/reference/compose-file/services)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌