首页/云/Docker 容器速查/docker run 环境变量 -e 与 --env-file
基础命令50 条

docker run 环境变量 -e 与 --env-file

用 -e 单个传入或 --env-file 批量注入环境变量;只写变量名时取宿主当前 shell 的同名值,是 12-factor 配置的常用做法。

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

环境变量注入是什么

在启动容器时用环境变量把配置交给应用,是容器化服务最常见的做法:镜像负责代码与默认值,环境相关的地址、账号、日志级别由运行时注入。可以逐个传入,也可以用文件批量注入,后者更适合变量较多的场景。

基本信息

单个注入多次使用 -e 键=值 的形式
批量注入用 --env-file 指定文件,文件内每行一个键值对
文件规则不要写导出关键字,不要加引号,空行会被忽略
只写键名表示从当前宿主环境取值,宿主没有该变量就等于没传
优先级命令行传入的值覆盖镜像里声明的同名默认值

典型使用场景

  • 区分环境:用同一个镜像跑开发、测试、生产,只改环境标识与依赖地址
  • 注入连接信息:数据库地址、缓存地址、外部接口域名按部署环境替换
  • 调整日志级别:排查期临时打开调试输出,事后改回常规级别
  • 统一时区与编码:避免日志时间与业务时间错位、文本出现乱码
  • 流水线部署:把流水线变量注入容器,实现版本号与构建信息的传递

常用示例

常用示例
docker run -d -e TZ=Asia/Shanghai -e APP_ENV=prod app/api:v1.2   # 逐个注入
docker run --rm --env-file ./app.env alpine:3.20 env | sort       # 按文件注入并回显
docker inspect -f '{{json .Config.Env}}' api                    # 核对实际生效的变量
# app.env 文件内容示例
# TZ=Asia/Shanghai
# APP_ENV=staging
# LOG_LEVEL=info

两种注入方式对照

对比项命令行逐个传按文件批量传
适合规模变量少、临时调试变量多、需要版本化维护
可读性命令很长且容易漏配置集中,便于对照评审
文件格式要求键值直接写在命令行每行一个键值对,不写导出关键字
版本管理写在部署脚本里文件可单独纳入配置管理
安全提示值会出现在进程参数与对象元数据里文件内容同样会进入对象元数据

写变量时的注意点

  • 变量名大小写敏感,应用读的是哪个名字要和代码里的拼写完全一致
  • 值里含空格或特殊字符要用引号包住,否则会被切成多段
  • 键和值之间不要多加空格,空格会成为变量名或值的一部分
  • 不要用环境变量传大段证书内容,文件挂载或密钥机制更合适
  • 同一变量在镜像与环境里都定义时,以运行时注入的为准,排查时先确认来源
用环境变量传密码与令牌时,值会出现在对象元数据和容器内进程环境里,任何能查看容器配置的人都能读到。生产环境优先用挂载文件或专用的密钥机制,并限制查看权限。
只写键名不写值并不是把变量清空,而是从宿主当前环境取值;宿主没有该变量时,容器里就完全看不到这个变量,这类静默失败最难排查。

确认变量的三步核对

  • 先看镜像里声明的默认值,确认不带任何注入时应用会使用什么配置
  • 再看运行对象里实际注入的值,确认发布时没有漏传或传错
  • 最后进容器回显一次变量,确认应用进程与脚本看到的是同一份配置

与配置管理的配合

  • 环境相关值放运行时注入,业务默认值与开关放镜像内声明,边界越清楚越省事
  • 变量清单要有单一出处,编排文件、部署脚本与文档共用一份来源
  • 每次新增变量都要写清楚必填还是可选,缺失时的行为要能预期
  • 敏感值不进版本库,用运行环境或密钥机制注入并限制查看范围
  • 变更变量后要重新创建容器,已经运行的容器不会自动读取新值

易错点

  • 配置文件里写了导出关键字或加了引号,变量名被污染,应用读到空值却毫无提示
  • 只写键名的写法依赖宿主环境,换了机器部署少了变量,服务直接起不来
  • 把口令当普通环境变量传递,任何能查看容器配置的人都能看到明文
  • 同时改了配置文件和部署脚本里的变量,两边不一致时以命令行传入的为准,排查容易被误导

数据来源与参考

  • Docker 官方 CLI 参考:docker run --env / --env-file(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌