我正在开发一个使用 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 服务,以及如何解决此问题?
版本:'3.7' 服务: 蒙戈数据库: 图片:mongo:最新 #container_name: mongoDB-Cont //指定容器名称 环境: MONGO_INITDB_ROOT_USERNAME:根 MONGO_INITDB_ROOT_PASSWORD:根密码 重新启动:始终 端口: - 27017:27017 卷: - mongodb_data_cont:/数据/数据库 请参考上面提到的它的工作