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

Docker环境下Flask连接MongoDB镜像超时报错问题排查

问题原因

  1. Docker域名解析失败

报错核心为test_mongodb主机名无法解析,本质是Flask应用的运行环境无法识别MongoDB的Docker内部主机名:

  • 若你直接在本地运行Flask(未放入Docker容器),本地环境没有Docker内部网络的域名解析规则,自然无法访问test_mongodb
  • 若你将Flask也通过Docker部署,要确认Flask服务和MongoDB服务在同一个Docker Compose编排网络内,才可以通过主机名互访
  1. 代码逻辑存在额外错误

初始化脚本创建的集合是staff_tb,但代码中查询的是不存在的beaconLocation_tb,即便连接成功也拿不到数据;同时循环遍历的变量名存在笔误,你遍历的是staff,取值却用了未定义的staffLocation变量。

解决步骤

  • 情况1:Flask在本地直接运行(未跑Docker)
    将get_db方法中的MongoDB连接地址改为本地回环地址即可,修改后的代码:
def get_db():
    client = MongoClient(host='127.0.0.1',
                         port=27017,
                         username='admin',
                         password='password',
                         authSource='admin')
    db = client["staff_db"]
    print("connection good")
    return db
  • 情况2:Flask也通过Docker Compose编排
    确认你的docker-compose.yml中已经添加Flask服务的配置,和MongoDB放在同一个配置文件中即可自动共享内部网络,示例配置如下:
version: '3'
services:
  mongodb:
    image: mongo:latest
    hostname: test_mongodb
    environment:
      - MONGO_INITDB_DATABASE=staff_db
      - MONGO_INITDB_ROOT_USERNAME=admin
      - MONGO_INITDB_ROOT_PASSWORD=password
    volumes:
      - ./init-db.js:/docker-entrypoint-initdb.d/init-db.js:ro
    ports:
      - 27017:27017
  # 新增Flask服务配置
  flask-app:
    build: . # 对应你Flask项目的Dockerfile存放路径
    ports:
      - 5000:5000
    depends_on:
      - mongodb
  • 修复代码其他问题:
    修正集合名、变量名的笔误,同时建议不要吞异常方便后续排查,修改后的接口代码参考:
@app.route('/location')
def get_staff_location():
    db = None
    staffs = []
    try:
        db = get_db()
        _staffs = db.staff_tb.find() # 修改为实际存在的集合名
        for staff in _staffs:
            temp_dict = {
                "id": staff["id"], # 修正变量名
                "staffid": staff["staffid"],
                "name": staff["name"]
            }
            staffs.append(temp_dict)
        return jsonify({'staff': staffs})
    except Exception as e:
        print(f"接口报错:{e}")
    finally:
        if isinstance(db, MongoClient):
           db.close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:09:00