直接用 docker run 命令加 -e 或 --env-file 就能创建带环境变量的容器,无需改镜像或重新构建;-e 适合调试和少量变量,同名变量覆盖镜像默认值,--env-file 更安全,适用于生产环境批量注入,避免敏感信息暴露在命令行中。

直接用 docker run 命令加 -e 或 --env-file 就能创建带环境变量的容器,不需要改镜像或重新构建。关键在于区分“运行时注入”和“构建时写死”,前者灵活安全,后者只适合默认值。
运行时用 -e 直接传单个变量
适合调试、快速验证或变量较少的场景。命令里每加一个 -e 就设置一个变量,同名变量会覆盖镜像里已有的默认值。
docker run -d -e NODE_ENV=production -e PORT=8080 nginxdocker run -d -e DB_HOST=10.0.1.5 -e DB_NAME=myapp my-app-image
用 --env-file 批量加载变量文件
推荐用于生产环境。把所有变量写进一个本地 .env 文件(记得加 .gitignore),避免敏感信息暴露在命令行历史里。
- 先准备
.env文件(内容示例):
DB_USER=admin
DB_PASSWORD=secret123
API_TIMEOUT=5000 - 再运行:
docker run -d --env-file .env my-app-image
通过 Docker Compose 管理多容器变量
编排多个服务时,优先用 environment 字段或 env_file。YAML 中支持映射写法,也支持引用宿主机变量。
- 直接写值:
environment:
NODE_ENV: "production"
LOG_LEVEL: "warn" - 加载外部文件:
env_file:
- ./prod.env - 引用宿主机当前值:
environment:
- DEBUG(自动取宿主机$DEBUG的值)
Dockerfile 里设 ENV 要谨慎
仅用于非敏感的默认配置,比如端口、日志级别。一旦写进镜像,任何人都能用 docker inspect 看到——密码、密钥绝不能放这里。
- 正确示例:
FROM node:18-alpine
ENV APP_PORT=3000
ENV CACHE_TTL=60 - 错误做法:
ENV DB_PASSWORD=abc123→ 安全风险高,应改用运行时注入











