1 回答

TA貢獻(xiàn)1943條經(jīng)驗(yàn) 獲得超7個贊
這是由于hostname
Docker 主機(jī)未解決。在 Docker 中,實(shí)例mongo1
、mongo2
和mongo3
可以通過這些名稱訪問。但是,無法從 Docker 主機(jī)訪問這些名稱。這行很明顯:
Addr:?mongo2:27017,?Type:?Unknown,?State:?Connected,?Average?RTT:?0,?Last?error:?dial?tcp:?lookup?mongo2:?no?such?host
MongoDB 驅(qū)動程序?qū)L試server discovery
從給定的副本集成員;它將找到副本集中的所有其他節(jié)點(diǎn)(通過rs.conf)。這里的問題是副本集設(shè)置了名稱mongo<N>
,驅(qū)動程序(在 Docker 主機(jī)中運(yùn)行)將無法解析這些名稱。您可以通過嘗試從 Docker 主機(jī) ping 來確認(rèn)這一點(diǎn)mongo1
。
您可以嘗試從與副本集共享同一 Docker 網(wǎng)絡(luò)的另一個 Docker 實(shí)例運(yùn)行應(yīng)用程序?;蛘撸薷?Docker 網(wǎng)絡(luò)以允許可解析的主機(jī)名。
這是由于連接方式的不同。當(dāng)指定單個節(jié)點(diǎn)時,即mongodb://node1:27017
在 shell 或 PyMongo 中,不會進(jìn)行服務(wù)器發(fā)現(xiàn)。相反,它將嘗試連接到該單個節(jié)點(diǎn)(而不是作為副本集的一部分)。問題是您需要連接到副本集的主節(jié)點(diǎn)才能寫入(您必須知道是哪一個)。如果您想作為副本集連接,則必須定義副本集名稱。
與 相比mongo-go-driver
,默認(rèn)情況下它將執(zhí)行服務(wù)器發(fā)現(xiàn)并嘗試作為副本集進(jìn)行連接。如果您想作為單個節(jié)點(diǎn)連接,則需要connect=direct
在連接 URI 中指定。
- 1 回答
- 0 關(guān)注
- 166 瀏覽
添加回答
舉報