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

Docker-Compose环境下Django createsuperuser命令执行失败问题

解决Docker中Django执行createsuperuser时的KeyError: 'POSTGRES_DB'问题

核心原因

这个错误是因为Django无法读取到POSTGRES_DB环境变量,导致数据库配置失败。直接在主机执行python manage.py createsuperuser时,主机环境没有Docker容器内的数据库相关环境变量,或者容器内的环境变量配置不完整。

解决步骤

1. 确认Django数据库配置使用环境变量

检查项目根目录下的settings.py,确保数据库配置通过环境变量获取,示例如下:

import os

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': os.getenv('POSTGRES_DB'),
        'USER': os.getenv('POSTGRES_USER'),
        'PASSWORD': os.getenv('POSTGRES_PASSWORD'),
        'HOST': os.getenv('POSTGRES_HOST', 'db'),  # 'db'对应docker-compose中数据库服务的名称
        'PORT': os.getenv('POSTGRES_PORT', '5432'),
    }
}

注意:必须导入os模块,否则无法使用os.getenv方法。

2. 检查docker-compose.yml的环境变量配置

确保app服务(你的Django应用服务名称)和db服务的数据库环境变量完全一致,示例配置:

version: '3.8'

services:
  app:
    build: .
    environment:
      - POSTGRES_DB=my_django_db
      - POSTGRES_USER=db_user
      - POSTGRES_PASSWORD=db_password
      - POSTGRES_HOST=db
    depends_on:
      - db
    # 其他配置(端口映射、卷挂载等)

  db:
    image: postgres:alpine
    environment:
      - POSTGRES_DB=my_django_db
      - POSTGRES_USER=db_user
      - POSTGRES_PASSWORD=db_password
    volumes:
      - postgres_data:/var/lib/postgresql/data/

volumes:
  postgres_data:

3. 在Django容器内执行创建超级用户命令

不要直接在主机执行命令,需进入运行中的Django应用容器操作:

  • 执行以下命令(将app替换为你docker-compose.yml中应用服务的实际名称):
docker-compose exec app python manage.py createsuperuser
  • 按照提示输入用户名、邮箱、密码即可完成超级用户创建。

如果容器未运行,或想临时启动容器执行命令,可使用:

docker-compose run --rm app python manage.py createsuperuser

4. 验证配置

完成上述步骤后,访问127.0.0.1:8000/admin,使用刚创建的超级用户账号即可登录后台管理面板。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 08:15:10