在Docker中配置和管理环境变量的详细指南
作者:思静鱼
在 Docker 中,配置和管理环境变量是非常常见的需求,用于传递配置参数、控制服务行为、实现环境隔离(如开发/测试/生产),下面从镜像构建、容器运行、Docker Compose、.env 文件等角度全面讲解,需要的朋友可以参考下
一、在 Dockerfile 中设置环境变量
使用 ENV
指令设置环境变量:
FROM alpine ENV TZ=Asia/Shanghai ENV LANG=C.UTF-8 ENV APP_ENV=production
这些变量在容器构建时和运行时都可用。
二、在 docker run 时传入环境变量
1. 使用 -e 传递单个变量:
docker run -e APP_ENV=dev -e TZ=Asia/Shanghai my-image
2. 使用 --env-file 加载多个变量:
创建 .env
文件(每行一个):
APP_ENV=dev TZ=Asia/Shanghai DB_HOST=127.0.0.1 DB_USER=root
然后运行容器时加载:
docker run --env-file .env my-image
三、在 docker-compose.yml 中配置环境变量
方法 1:直接在 environment: 中配置
services: app: image: my-app environment: - APP_ENV=dev - DB_HOST=localhost
方法 2:引用 .env 文件(自动读取)
.env
文件内容:
APP_ENV=production DB_HOST=db.local
Compose 文件中直接使用 ${VAR}
:
services: app: image: my-app environment: - APP_ENV=${APP_ENV} - DB_HOST=${DB_HOST}
注意: Compose 默认会自动读取同目录下的 .env 文件(无需额外指定)。
四、容器内部如何读取环境变量?
进入容器后使用:
docker exec -it my-container sh # 查看环境变量 env # 读取单个变量 echo $APP_ENV
五、注意事项与最佳实践
问题 | 建议 |
---|---|
敏感信息(如密码) | 避免写在 Dockerfile,建议运行时注入或用 Secret 管理 |
多环境配置 | 使用 .env.dev, .env.prod 区分不同环境 |
配置优先级 | docker run -e > ENV in Dockerfile |
修改变量重启容器 | 变量更改后必须重启容器才生效 |
六、查看和调试容器中的环境变量
查看运行中容器的环境变量:
docker inspect <容器名> | grep -A 10 "Env"
示例输出:
"Env": [ "APP_ENV=dev", "TZ=Asia/Shanghai" ]
七、环境变量注入 Java 程序(示例)
在 Spring Boot 项目中配置:
@Value("${APP_ENV}") private String appEnv;
启动参数中注入:
docker run -e APP_ENV=dev my-spring-app
总结
场景 | 用法 |
---|---|
Dockerfile 中写死变量 | ENV KEY=value |
启动时传变量 | -e KEY=value or --env-file |
Compose 配置变量 | environment: + .env 文件 |
动态配置/安全注入 | 推荐外部传入,不写死在镜像中 |
如果你需要:
- 在 Docker 容器中读取数据库配置、环境标识等,
- 使用
.env
文件多环境切换, - 或你想让 Java 程序读取环境变量作为配置
到此这篇关于在Docker中配置和管理环境变量的详细指南的文章就介绍到这了,更多相关Docker配置和管理环境变量内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!