【发布时间】:2022-01-22 09:52:17
【问题描述】:
我正在尝试编写一个 python 脚本,其目标是在我的开发环境中启动一个 MongoDB 副本集节点(注意:我只有一个节点),而不必使用 mongo shell。所以脚本打算手动运行一次。
我使用 docker 运行 MongoDB,这是我的 docker-compose 文件的一部分:
mongodb:
image: "mongo:5.0-focal"
ports:
- "27017:27017"
volumes:
- mongodb:/data/db
entrypoint:
[
"/usr/bin/mongod",
"--bind_ip_all",
"--replSet",
"rs0"
]
我在属于同一网络的另一个 docker 容器中运行以下 python 代码,以便它可以查看主机名 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 方面的专家,但我在这里遗漏了什么吗?
【问题讨论】: