You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 00:22:29