Docker环境下Django无法读取环境变量问题求助
Django容器无法读取环境变量问题排查
我正在搭建Docker Compose环境,但Django始终读不到配置的环境变量。我的settings.py里相关代码如下:
... import os SECRET_KEY = os.environ["DJANGO_SECRET_KEY"] DEBUG = os.environ["DEBUG"] == "True" ...
按照逻辑,它应该能读取容器的环境变量,但我试了好几种配置方式,所有错误都出现在Docker构建阶段执行manage.py操作时,提示Django找不到变量:
.env文件内容
DJANGO_SECRET_KEY="k64dpx9s1h!ijwafy-lif!(*)sabwk*w+rg#6=nu@ty2jkw%gc" DEBUG="False"
尝试的配置及错误
尝试1:在compose.yaml中配置env_file
配置内容:services: django: env_file: - ./django/.env错误:
KeyError: DJANGO_SECRET_KEY(变量不存在)尝试2:修改env_file路径
配置内容:services: django: env_file: - /some/other/random/path错误:文件不存在(实际路径是正确的)
尝试3:硬编码环境变量
配置内容:services: django: environment: DJANGO_SECRET_KEY: "k64dpx9s1h!ijwafy-lif!(*)sabwk*w+rg#6=nu@ty2jkw%gc" DEBUG: "False" env_file: - ./django/.env错误:
KeyError: DJANGO_SECRET_KEY(变量不存在)尝试4:运行独立容器
命令:docker run -dp 127.0.0.1:8000:8000 \ -e DJANGO_SECRET_KEY='k64dpx9s1h!ijwafy-lif!(*)sabwk*w+rg#6=nu@ty2jkw%gc' \ -e DEBUG="False" django:v0错误:
KeyError: DJANGO_SECRET_KEY(变量不存在)
注:不要建议我用dict.get(key)替代dict[key],出错比用空值或默认值更合理。
后续编辑
或许这个问题没解决也不是坏事,考虑到各种风险,我决定在构建镜像时生成密钥写入文件。我知道Docker Compose的secrets,但觉得安全性不够。目前已经在Dockerfile中添加了这段代码(在执行Django和manage.py操作前):
RUN python -c 'from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())' >> /app/key
现在改成从这个文件读取密钥,但最初的环境变量问题还是没搞明白。
内容的提问来源于stack exchange,提问作者Tox46
相关产品推荐
相关产品推荐

