当我尝试在我的 Flask 应用程序中执行 get 或 post 时,出现以下错误。
mongo:27017: [Errno -2] 名称无法解析(配置的超时: socketTimeoutMS:20000.0ms,connectTimeoutMS:20000.0ms),超时: 30s,拓扑描述:
]>
我的应用程序.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-compose
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:
表示存在连接错误的错误对我来说没有多大意义,因为正在生成的日志显示请求通过连接线。
有谁知道如何解决吗?
Docker 容器通过其服务名称引用;将连接字符串更改为:
MONGO_URI = "mongodb://admin:admin@mongodb:27017/"
请注意,创建
MongoClient
对象实际上并不尝试数据库连接,因此您不能仅仅因为此时没有失败就假设已连接。