pymongo.errors.ServerSelectionTimeoutError:db:27017:超时,超时:30秒,

Fai*_*mon 0 python pymongo docker dockerfile docker-compose

我正在尝试运行 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')>]>
Run Code Online (Sandbox Code Playgroud)

当我尝试访问本地主机时,我在日志中收到上述错误。当我尝试在浏览器中访问本地主机时,我看到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)
Run Code Online (Sandbox Code Playgroud)

这是我的 docker-compose.yml:

services:
  web:
    build: ./web
    ports:
      - "5000:5000"
    depends_on:
      - db
  db:
    build: ./db
    ports:
      - '27017-27019:27017-27019'
Run Code Online (Sandbox Code Playgroud)

任何帮助都将不胜感激。

小智 5

我面临着类似的问题。就我而言,我已通过隧道将 mongoDB 副本连接到本地,我可以使用 Compass 应用程序访问它。但无法通过 Pymongo 访问它。我使用的是本地主机:端口、用户 ID 和密码。后来只是从指南针复制了连接字符串并尝试了,它成功了!

客户端= MongoClient('mongodb://USER:PASSWORD@localhost:PORT/?authSource=admin&readPreference=secondary&directConnection=true&ssl=false')