如何在Docker/docker-compose中便捷使用环境变量(Django项目场景)
你之前操作无效的核心原因有两个:
docker exec -e注入的环境变量仅对本次 exec 启动的会话/命令生效,容器内已经启动的 Django 进程在启动时就完成了环境变量加载,不会读取后续注入的新变量,因此 Stripe 无法读取到密钥- 不带命令直接执行
docker exec -e stripeAPI=(secret key) <container_id>会报错,因为 exec 必须指定要在容器内运行的命令,你之前追加 echo、bash 等于补全了命令参数,因此可以正常执行,但仅生效于当前会话。
最便捷的环境变量配置方案
1. Docker 原生运行场景
两种常用方式,按需选择:
- 启动容器时直接注入变量,适合变量少的场景
启动命令示例:docker run -e stripeAPI="你的Stripe密钥" -p 8000:8000 你的Django镜像名称 - 通过.env文件批量注入,适合多变量场景,可直接复用本地开发的.env文件,不需要修改代码
第一步:在项目根目录新建.env文件,写入变量:
第二步:启动时指定env文件:stripeAPI=sk_xxxxxxxxxx # 其他需要的环境变量都可以往下加docker run --env-file .env -p 8000:8000 你的Django镜像名称
2. docker-compose 运行场景(更推荐)
两种常用配置方式:
- 直接在
docker-compose.yml中配置:version: '3' services: django: build: . ports: - "8000:8000" environment: - stripeAPI=你的Stripe密钥 # 其他环境变量往下追加即可 - 读取本地.env文件(最推荐,密钥不会写到配置文件里,避免误提交到代码仓库):
直接复用本地开发用的version: '3' services: django: build: . ports: - "8000:8000" env_file: .env.env文件即可,不需要修改配置。
验证生效方法
配置完成后重启容器,执行以下操作确认变量生效:
- 进入容器执行
echo $stripeAPI,确认输出为你的密钥 - 可以在Django代码中临时加一行打印逻辑验证:
启动容器后访问对应服务,查看控制台输出是否正确打印密钥即可。import os print(os.environ.get("stripeAPI"))
注意:所有环境变量修改后都需要重启容器才能生效,运行中的进程不会实时读取新的环境变量
内容的提问来源于stack exchange,提问作者Kay
相关产品推荐
相关产品推荐

