在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 程序读取环境变量作为配置,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

思静鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值