使用 pymongo 启动 ReplicaSet 节点时出现问题

Problem initiating ReplicaSet node using pymongo

我正在尝试编写一个 python 脚本,其目标是在我的开发环境中启动一个 MongoDB 复制集节点(注意:我只有一个节点)而不必使用 mongo shell。所以脚本打算手动运行一次

我 运行 MongoDB 使用 docker 这是我的 docker-compose 文件的一部分:

mongodb:
    image: "mongo:5.0-focal"
    ports:
      - "27017:27017"
    volumes:
      - mongodb:/data/db    
    entrypoint:
      [
        "/usr/bin/mongod",
        "--bind_ip_all",
        "--replSet",
        "rs0" 
      ]

我运行以下python代码在属于同一网络的另一个docker容器中,以便它在主机名上可见mongodb。我的pymongo版本是4.0.1

import os
from pymongo import MongoClient

try:
    client = MongoClient('mongodb',27017,serverSelectionTimeoutMS=5000)
    config = { '_id': 'rs0', 'members': [{'_id': 0, 'host': 'mongodb:27017'}]}
    print("REPLICA SET config:")
    print(config)
    out = client.admin.command("replSetInitiate", config)
    print(out)
except Exception as e:
    print("Error!")
    print(e)
    pass

运行正在运行脚本我遇到了这个错误:

No servers match selector "Primary()", Timeout: 5.0s, Topology Description: <TopologyDescription id: 61c0dffc7f72958bdd10e65f, topology_type: Unknown, servers: [<ServerDescription ('mongodb', 27017) server_type: RSGhost, rtt: 0.004416499999933876>]>

好的,没有服务器匹配Primary选择器,但是如果我不先启动replicaSet,我怎么会有Primary呢?不是 pymongo 和 MongoDB 方面的专家,但我在这里遗漏了什么吗?

我遇到了类似的问题并遇到了 https://jira.mongodb.org/browse/PYTHON-3027。将 'directConnection=True' 作为参数传递给 MongoClient 似乎有所帮助。虽然,我不确定这是如何工作的。