pymongo.errors.ServerSelectionTimeoutError: db:27017: timed



我正在尝试运行Flask和MongoDb应用程序并获得以下错误。以下是我可以使用sudo docker logs <container-name>

获取的日志
self._select_servers_loop(
File "/usr/local/lib/python3.10/site-packages/pymongo/topology.py", line 227, in _select_servers_loop
raise ServerSelectionTimeoutError(
pymongo.errors.ServerSelectionTimeoutError: db:27017: timed out, Timeout: 30s, Topology Description: <TopologyDescription id: 626fc61ba785d70a66a1ea12, topology_type: Unknown, servers: [<ServerDescription ('db', 27017) server_type: Unknown, rtt: None, error=NetworkTimeout('db:27017: timed out')>]>

当我尝试访问localhost时,我在日志中得到上述错误。当我尝试在浏览器中访问localhost时,我看到connection was reset错误,然后我看到上面的日志正在生成。

这是我的app.py文件

from flask_restful import Api, Resource
import os
from pymongo import MongoClient
app = Flask(__name__)
api = Api(app)

client = MongoClient("mongodb://db:27017", port=27017, directConnection=True)
db = client.aNewDB
UserNum = db["UserNum"]
UserNum.insert_one({
'num_of_users':0
})
class Visit(Resource):
def get(self):
prev_num = UserNum.find({})[0]['num_of_users']
new_num = prev_num + 1
UserNum.update_one({}, {"$set":{"num_of_users":new_num}})
return str("Hello user" + str(new_num))
api.add_resource(Visit,"/")
if __name__=="__main__":
port = int(os.environ.get('PORT',5000))
app.run(host='0.0.0.0', port=port)

这是我的docker-compose.yml:

services:
web:
build: ./web
ports:
- "5000:5000"
depends_on:
- db
db:
build: ./db
ports:
- '27017-27019:27017-27019'
如有任何帮助,不胜感激。

我也面临着类似的问题。在我的例子中,我通过隧道将mongoDB副本连接到我的本地,我可以使用Compass应用程序访问它。但无法通过Pymongo访问。我使用的是Localhost:Port, user_id &密码。后来只是复制连接字符串从指南针和尝试,它工作!

客户= MongoClient (mongodb://用户:PASSWORD@localhost:港口/? authSource = admin& readPreference = secondary& directConnection = true& ssl = false")

相关内容

最新更新