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

Docker容器部署后访问/admin/login/出现OperationalError:auth_user表不存在

解决Django Docker部署后auth_user表不存在的问题

出现OperationalError: no such table: auth_user,核心原因是Django用户认证表未被正确创建,大概率是迁移(migrate)流程出了问题,结合你的entrypoint.sh脚本,按以下步骤排查修复:

  • 确认migrate是否真的执行成功

    1. 查看容器启动日志,搜索migrate相关输出,排查是否有数据库连接失败、迁移文件找不到等报错
    2. 手动进入容器执行命令,检查auth模块迁移状态:
      /opt/venv/bin/python manage.py showmigrations auth
      
      如果输出中auth模块的迁移项未打勾(比如[ ] 0001_initial),说明迁移未执行,手动执行单独迁移:
      /opt/venv/bin/python manage.py migrate auth
      
      完成后重启服务即可。
  • 检查数据库连接配置
    验证Django settings.py中的DATABASES配置:

    • 若使用容器内SQLite,确保数据库文件路径有读写权限,且配置路径正确
    • 若使用外部数据库(如PostgreSQL/MySQL),确认容器能访问到数据库服务,账号密码具备建表权限,目标数据库已提前创建
  • 优化entrypoint.sh的排查能力
    原脚本无日志输出,难以定位migrate失败原因,修改脚本增加调试信息:

    #!/bin/bash
    cd /app/
    # 打印数据库配置,快速验证连接参数
    echo "=== 当前数据库配置 ==="
    /opt/venv/bin/python manage.py shell -c "from django.conf import settings; print(settings.DATABASES)"
    # 执行迁移并保存日志
    /opt/venv/bin/python manage.py migrate --noinput 2>&1 | tee /app/migrate.log
    # 检查auth模块迁移状态
    echo "=== auth模块迁移状态 ==="
    /opt/venv/bin/python manage.py showmigrations auth
    # 启动服务
    /opt/venv/bin/gunicorn --worker-tmp-dir /dev/shm django_k8s.wsgi:application --bind "0.0.0.0:8000"
    

    启动容器后查看/app/migrate.log,即可获取迁移详细输出快速定位问题。

  • 排查迁移文件缺失问题
    检查容器内/app/目录下是否存在auth模块迁移文件(路径通常为auth/migrations/),若缺失,说明构建Docker镜像时未复制migrations目录,需修改Dockerfile确保包含:

    COPY . /app/
    

    若使用自定义用户模型,需确保对应应用的migrations目录也被正确复制。

  • 自定义用户模型的特殊处理
    若项目设置了AUTH_USER_MODEL自定义用户模型,需确保:

    1. 对应应用的迁移文件已生成并复制到容器中
    2. 迁移执行顺序正确,先migrate自定义用户模型所在应用,再处理其他模块
      生产环境建议在构建镜像前执行makemigrations生成迁移文件,避免在entrypoint中动态生成导致迁移记录不一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 07:06:17