通过docker-compose创建的Django超级用户无法登录管理面板如何解决
解决方案
核心问题原因
- Django服务未加载
.env中的DJANGO_SUPERUSER_PASSWORD环境变量,无密码参数时createsuperuser --noinput会执行失败 - 未配置Django连接Mongo的环境变量,超级用户数据未正确写入数据库
- 每次容器启动都重复执行
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
相关产品推荐
相关产品推荐

