使用 Docker Compose 的 Flask 应用程序无法连接到 MongoDB:ServerSelectionTimeoutError

问题描述 投票:0回答:1

我正在开发一个使用 MongoDB 进行存储的 Flask 应用程序,并且我正在尝试使用 Docker Compose 对设置进行 docker 化。但是,当 Flask 应用程序尝试连接到 MongoDB 时,我遇到了 ServerSelectionTimeoutError。该错误表明应用程序正在尝试连接到 localhost:27017 而不是 Docker Compose 文件中定义的 MongoDB 服务。

这是我的 docker-compose.yml 文件的相关部分:

services:
  mongo:
    image: mongo
    ports:
      - "27017:27017"

  backend:
    build: ./backend
    ports:
      - "5000:5000"
    depends_on:
      - mongo
    environment:
      MONGODB_URI: "mongodb://mongo:27017/mylibrary"

在我的 Flask 应用程序的 config.py 中,我根据环境变量设置 MONGO_URI:

class Config:
    MONGO_URI = os.environ.get('MONGODB_URI') or "mongodb://mongo:27017/mylibrary"

在 Flask 应用程序 (app/init.py) 中,我使用此配置:

from flask import Flask
from .extensions import db
from .books.routes import api as books_api

def create_app(config_filename=None):
    app = Flask(__name__)
    app.config.from_object(config_filename)
    db.init_app(app)
    books_api.init_app(app)

    return app


尽管进行了这些设置,我还是收到以下错误:

pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [Errno 111] Connection refused

我尝试通过在 Flask 应用程序中打印

MONGO_URI
进行调试,并且它正确显示
mongodb://mongo:27017/mylibrary
。我还确保在更改配置后重建 Docker 映像并重新启动容器。

可能导致 Flask 应用程序尝试连接到 localhost 而不是 Docker Compose 中定义的 MongoDB 服务,以及如何解决此问题?

python mongodb docker flask docker-compose
1个回答
0
投票

版本:'3.7' 服务: 蒙戈数据库: 图片:mongo:最新 #container_name: mongoDB-Cont //指定容器名称 环境: MONGO_INITDB_ROOT_USERNAME:根 MONGO_INITDB_ROOT_PASSWORD:根密码 重新启动:始终 端口: - 27017:27017 卷: - mongodb_data_cont:/数据/数据库 请参考上面提到的它的工作

© www.soinside.com 2019 - 2024. All rights reserved.