docker部署中环境变量注入核心是运行时传递配置,支持-e单变量、--env-file批量加载及docker-compose统一定义;应用需按框架规范读取,如spring boot用${}、node.js用process.env。

Docker 部署中配置环境变量注入应用,核心是让容器启动时把配置“带进去”,应用在运行时能直接读取,无需修改代码或重建镜像。关键不在于写死在代码里,而在于分层传递、按需覆盖。
运行时用 -e 直接传参(最常用)
适合单次调试、CI/CD 临时覆盖或少量变量。命令简洁,优先级最高:
- 格式:
docker run -e KEY1=value1 -e KEY2=value2 image-name - 例如:
docker run -e SPRING_DATASOURCE_URL=jdbc:mysql://db:3306/app -e LOG_LEVEL=INFO my-spring-app - 注意:值含空格或特殊字符时建议加引号,如
-e "APP_NAME=My App"
用 --env-file 批量加载(推荐生产)
把所有变量集中管理在 .env 文件里,避免命令行过长、泄露敏感信息,也便于版本控制:
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
-
.env文件示例(无空格、无引号、# 开头为注释):
DB_HOST=db
DB_PORT=5432
JWT_SECRET=abc123
APP_ENV=prod - 启动命令:
docker run --env-file .env -p 8080:8080 my-app - 支持多个文件叠加:
--env-file .env.common --env-file .env.prod
在 docker-compose.yml 中统一定义(多服务协作)
适合微服务或依赖数据库、缓存等配套组件的场景,变量可跨服务共享或隔离:
- 直接写值:
environment:
- DB_URL=postgresql://user:pass@db:5432/app
- REDIS_URL=redis://cache:6379 - 引用外部文件:
env_file:
- .env.shared
- ./secrets/.env.prod - 还可结合
args在构建阶段传参(如构建时指定 NODE_ENV),与运行时environment分离
让应用真正读到变量(语言适配要点)
环境变量注入后,应用需主动读取。不同框架有约定俗成的方式:
- Spring Boot:用
${VAR_NAME}占位符,如spring.datasource.url=${SPRING_DATASOURCE_URL} - Node.js:
process.env.DB_HOST,建议加默认值|| 'localhost' - Python:
os.getenv('DB_HOST', 'localhost') - Kafka/Easysearch 等中间件:通常识别特定前缀(如
KAFKA_、EASYSEARCH_),自动映射为配置项










