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

通过docker-compose创建的Django超级用户无法登录管理面板如何解决

解决方案

核心问题原因

  1. Django服务未加载.env中的DJANGO_SUPERUSER_PASSWORD环境变量,无密码参数时createsuperuser --noinput会执行失败
  2. 未配置Django连接Mongo的环境变量,超级用户数据未正确写入数据库
  3. 每次容器启动都重复执行createsuperuser,如果已存在同名用户会报错跳过创建流程

修复步骤

1. 修改docker-compose.yml配置

首先取消Django服务的environment注释,补充必要环境变量,同时修改启动命令避免重复创建超级用户:

version: "3"
services:
       cursor-infotech:
           container_name: cursor
           image: cursor
           restart: always
           build: .
           environment:
              - MONGO_URI=mongodb://root:password@mongo:27017/cursor-pcbuild?authSource=admin
              - DJANGO_SUPERUSER_PASSWORD=${DJANGO_SUPERUSER_PASSWORD}
           ports:
              - "7000:7000"
           networks:
              - cursor-backend
           depends_on:
              - mongo
           command: > 
                sh -c "python manage.py makemigrations && python manage.py migrate && 
                python manage.py shell -c \"from django.contrib.auth import get_user_model; User = get_user_model(); User.objects.filter(username='admin').exists() or User.objects.create_superuser('admin', 'admin@test.com', '${DJANGO_SUPERUSER_PASSWORD}')\" && gunicorn -b 0.0.0.0:7000 cursor_infotech.wsgi"
       mongo:
             container_name: mongo
             image: mongo  
             environment:
               - MONGO_INITDB_DATABASE=cursor-pcbuild
               - MONGO_INITDB_ROOT_USERNAME=root
               - MONGO_INITDB_ROOT_PASSWORD=password
             volumes:
                # 测试阶段可先注释此行避免初始化脚本冲突
                # - ./init-mongo.js:/docker-entrypoint-initdb.d/init-mongo-js:ro
                - ./data:/usr/share/db/data
             ports:
                - '27017:27017'
             networks:
                - cursor-backend 
networks:
  cursor-backend:
    driver: bridge

2. 确认Django数据库配置

检查项目settings.py中的Mongo连接配置,确保和docker-compose的参数一致:

DATABASES = {
    'default': {
        'ENGINE': 'djongo',
        'NAME': 'cursor-pcbuild',
        'CLIENT': {
            'host': 'mongo',
            'port': 27017,
            'username': 'root',
            'password': 'password',
            'authSource': 'admin',
        }
    }
}

3. 清空历史无效数据并重启服务

执行以下命令删除旧容器和关联存储卷,避免历史残留数据影响:

# 停止并删除容器、关联卷
docker-compose down -v
# 重新构建启动服务
docker-compose up --build

4. 验证超级用户是否创建成功

服务启动后进入Django容器验证用户存在性:

# 进入容器
docker exec -it cursor sh
# 进入Django shell
python manage.py shell

在shell中执行以下代码,返回True则说明超级用户创建成功:

from django.contrib.auth import get_user_model
print(get_user_model().objects.filter(username='admin').exists())

完成以上操作后即可使用用户名admin、密码password登录Django管理后台。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 12:06:02