当我try 在我的FASK应用程序中执行GET或POST时,出现以下错误.

Mongo:27017:[Errno-2]名称不能解析(配置的超时: SocketTimeoutMS:20000.0ms,ConnectTimeoutMS:20000.0ms),超时: 30s,拓Flutter 描述:<拓Flutter 描述ID: 657c619ae1e4696f65e708c2,拓Flutter 图类型:未知,服务器: [<ServerDescription(‘Mongo’,27017)SERVER_TYPE:未知,实时:无, 错误=自动侦测(‘Mongo:27017:[Errno-2]名称未解析 (配置超时:socketTimeoutMS:20000.0ms,ConnectTimeoutMS: 20000.0ms)‘)>]>

我的app.py

from flask import Flask, jsonify
from pymongo import MongoClient
from loguru import logger
from bson.json_util import dumps

app = Flask(__name__)

MONGO_URI = "mongodb://admin:admin@mongo:27017/"

@app.route('/', methods=['GET'])
def get_data():
    try:
        logger.info('Connecting to MongoDB')
        client = MongoClient(MONGO_URI)
        logger.info('Connected to MongoDB')
        db = client.test
        collection = db.test
        data = collection.find({})
        serialized_data = dumps(data)
        logger.info('Data retrieved successfully')
        return jsonify({"data": serialized_data}), 200
    except Exception as e:
        return jsonify({"error": f"{str(e)}"}), 500

@app.route('/', methods=['POST'])
def create_data():
    try:
        logger.info('Connecting to MongoDB')
        client = MongoClient(MONGO_URI)
        logger.info('Connected to MongoDB')
        db = client.test
        collection = db.test
        data = collection.insert_one({"name": "test"})
        logger.info('Data created successfully')
        return jsonify({"data": data}), 200
    except Exception as e:
        return jsonify({"error": f"{str(e)}"}), 500

if __name__ == '__main__':
    app.run(host='0.0.0.0')

Docker-作文

version: '3.9'

services:
  web:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "5000:5000"
    depends_on:
      - mongodb
      - nginx

  nginx:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro

  mongodb:
    image: mongo:latest
    ports:
      - "27017:27017"
    environment:
      - MONGO_INITDB_DATABASE=test
      - MONGO_INITDB_ROOT_USERNAME=admin
      - MONGO_INITDB_ROOT_PASSWORD=admin
      - MONGO_URI=mongodb://admin:admin@mongodb:27017/test
    volumes:
      - mongodb_data:/data/db

volumes:
  mongodb_data:

表示存在连接错误的错误对我来说没有多大意义,因为生成的日志(log)显示请求通过连接线.

有谁知道怎么解这个题吗?

推荐答案

Docker容器由其服务名称引用;将您的连接字符串更改为:

MONGO_URI = "mongodb://admin:admin@mongodb:27017/"

请注意,创建MongoClient对象实际上并不会try 数据库连接,因此您不能仅仅因为在这一点上没有失败就假定您已连接.

Mongodb相关问答推荐

使用查询参数过滤MongoDB Go驱动程序时出现问题

数组中字符串的Mongo查询集合和推送到新数组嵌套对象

MongoDB $lookup 查找字段值数组

MongoDB DB参考返回null值

MongoDB - 来自先前匹配文档的聚合匹配字段

在延迟函数中重用 context.WithTimeout

如何在 go mongo-driver 中为 options.FindOne() 设置限制

Mongo:查找具有 0 个关联文档的文档,成本更低

DB 中的引用对象在 GraphQL 查询中返回 null

MongoDB 聚合使用 $match 和 $expr 和数组

如何在mongoDB中按嵌套文档分组( group by )

替换 MongoDB 中数组中的嵌入文档

Mongo 可尾游标与 Redis 发布/订阅

使用 MongoDB 进行分页

使用 mgo 存储嵌套 struct

嵌套在文档数组中的mongodb展开数组

django 和 mongodb 是否使迁移成为过go ?

Mongoose 连接认证失败

MongoDB 用 $type 匹配一个数组?

无法从 mongodb 中删除集合