-e参数是注入环境变量最直接高优先级方式,支持单个/多个变量叠加、引用宿主机变量、默认值语法${var:-default},但敏感信息应避免明文使用而改用--env-file或secrets。
运行容器时用 -e 参数注入环境变量,是最直接、优先级最高的方式,适合动态切换配置或覆盖镜像默认值。
单个和多个变量怎么写
每个变量单独加一个 -e,顺序不限,可叠加使用:
docker run -e ENV=prod -e PORT=3000 nginxdocker run -e TZ=Asia/Shanghai -e LOG_LEVEL=warn myapp
变量值可以来自宿主机环境
用 $VAR_NAME 引用当前 shell 已设置的变量,避免硬编码:
- 先在终端执行:
export DB_HOST=localhost - 再运行容器:
docker run -e DATABASE_HOST=$DB_HOST myapp
带默认值的写法
用 ${VAR:-default} 语法,变量未定义时自动 fallback:
-
docker run -e PORT=${SERVER_PORT:-8080} myapp→ 若宿主机没设 SERVER_PORT,容器内 PORT 就是 8080 - 适合 CI/CD 流水线中部分环境未预设变量的场景
敏感信息要谨慎处理
命令行里明文写密钥、token 等,会留在 shell 历史记录和进程列表中,存在泄露风险:
- 不推荐:
docker run -e API_KEY=sk-xxx myapp - 更安全的做法:改用
--env-file文件方式,或结合 secrets 管理工具











