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

Docker部署对接MongoDB的Django应用出现连接与CSRF报错如何解决

问题根因

你的报错核心原因是Django容器内的MongoDB连接配置指向了localhost:27017,但Docker容器的localhost仅指代当前容器自身,无法访问到同docker-compose下的MongoDB容器。你看到的CSRF报错是衍生问题:Django连接Mongo失败抛出500错误,登录页没有正常渲染出CSRF token,所以提交请求时才会报CSRF校验失败。

具体修改步骤

  1. 修改Django项目中MongoDB连接配置
    打开你的Djangosettings.py文件,找到MongoDB连接的相关配置,将主机地址从localhost替换为docker-compose中MongoDB服务的名称mongodb_container,示例配置参考:
# djongo驱动配置示例
DATABASES = {
    'default': {
        'ENGINE': 'djongo',
        'NAME': '自定义数据库名',
        'CLIENT': {
            'host': 'mongodb_container', # 填写docker-compose里的MongoDB服务名
            'port': 27017,
        }
    }
}

# 直接使用pymongo连接示例
client = pymongo.MongoClient(host='mongodb_container', port=27017)
  1. 可选:添加启动等待逻辑避免Mongo未就绪报错
    depends_on仅保证Mongo容器先启动,不保证Mongo服务完全初始化完成,可能出现Django启动时Mongo还没就绪的偶发连接失败。你可以修改docker-compose里web服务的启动命令,添加等待逻辑:
web:
  build: .
  # 等待mongodb_container的27017端口通了再启动Django,需提前在项目根目录放入wait-for-it.sh脚本
  command: bash -c "wait-for-it mongodb_container:27017 -- python manage.py runserver 0.0.0.0:8000"
  volumes:
    - django_data_container:/home/app/webapp  
  ports:
    - "8000:8000"
  depends_on:
    - mongodb_container

临时测试可以用sleep命令简化:command: bash -c "sleep 10 && python manage.py runserver 0.0.0.0:8000"

  1. 重启容器生效
    修改完成后执行以下命令重建容器即可:
docker-compose down -v
docker-compose up --build

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:54:04