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

Docker Compose中Django项目无法读取.dev.env环境变量求助

问题:Docker Compose指定的环境变量未加载到Django项目中

在Django项目中配置了docker-compose.yml,指定env_file为.dev.env,编写了对应Dockerfile,执行docker-compose build和docker-compose up -d启动项目后,在settings.py中通过load_dotenv()和os.environ查看环境变量,发现.dev.env中的ALLOWED_HOSTS、DEBUG等变量未被加载。

相关配置文件

docker-compose.yml

version: '3.8'

services:
  web:
    build: ./app
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - ./app/:/usr/src/app/
    ports:
      - 8000:8000
    env_file: 
      - .dev.env

./app目录下的Dockerfile

FROM kuralabs/python3-dev

WORKDIR /usr/src/app

ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# RUN pip install --upgrade pip 

COPY ./requirements.txt .
RUN pip3 install -r requirements.txt

COPY . .

.dev.env文件

ALLOWED_HOSTS='localhost 127.0.0.1'
DEBUG=1
SECRET_KEY='django-insecure-...'

启动命令

$ docker-compose build
$ docker-compose up -d

settings.py相关代码

load_dotenv()
print(f'Environment: {os.environ}')

排查与解决方案

1. 先确认容器内是否存在目标环境变量

执行以下命令查看容器内的环境变量:

docker exec <容器名称或ID> env
  • 如果输出中没有ALLOWED_HOSTS、DEBUG等变量:
    检查.dev.env文件是否和docker-compose.yml在同一目录下。docker-compose的env_file路径是相对执行docker-compose命令的当前目录的,若你在非docker-compose.yml所在目录执行命令,会导致路径找不到文件。

  • 如果输出中有这些变量:
    问题出在Django的配置代码和.env文件格式上:

    • 无需调用load_dotenv():docker-compose已经将.dev.env中的变量注入到容器的系统环境变量中,直接通过os.environ.get()读取即可。调用load_dotenv()会默认去加载容器内当前目录下的.env文件(而你的项目中没有这个文件),反而可能干扰环境变量的读取。修改settings.py代码如下:
      import os
      
      DEBUG = os.environ.get('DEBUG', False) == '1'
      ALLOWED_HOSTS = os.environ.get('ALLOWED_HOSTS', '').split()
      SECRET_KEY = os.environ.get('SECRET_KEY')
      
    • 修正.env文件格式:.dev.env中ALLOWED_HOSTS的单引号会被docker-compose当作值的一部分传递给容器,导致Django读取到的是带单引号的字符串,引发解析错误。修改为:
      ALLOWED_HOSTS=localhost 127.0.0.1
      DEBUG=1
      SECRET_KEY=django-insecure-...
      

内容的提问来源于stack exchange,提问作者EvoluSpace

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 09:30:55