我正在嘗試撰寫一個 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>]>
好的,沒有服務器匹配主選擇器,但是如果我不先啟動副本集,我怎么能擁有主選擇器呢?不是 pymongo 和 MongoDB 的專家,但我在這里遺漏了什么嗎?
uj5u.com熱心網友回復:
我遇到了類似的問題,并遇到了https://jira.mongodb.org/browse/PYTHON-3027。將 'directConnection=True' 作為引數傳遞給 MongoClient 似乎有幫助。雖然,我不確定這是如何作業的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/390054.html
上一篇:從云函式內部構建容器映像
