第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Docker 和 mongo-go-driver “服務(wù)器選擇錯誤”

Docker 和 mongo-go-driver “服務(wù)器選擇錯誤”

Go
心有法竹 2023-06-19 17:40:36
我使用 Docker 設(shè)置并運(yùn)行了一個 MongoDB 副本,我可以通過控制臺或 Robo3T 客戶端進(jìn)行訪問,并運(yùn)行任何查詢。這些是容器:$ docker psCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                      NAMESefe6ae03323d        mongo               "docker-entrypoint.s…"   10 minutes ago      Up 10 minutes       0.0.0.0:30001->27017/tcp   mongo157d2701c8a43        mongo               "docker-entrypoint.s…"   10 minutes ago      Up 10 minutes       0.0.0.0:30002->27017/tcp   mongo27553966b9ff5        mongo               "docker-entrypoint.s…"   10 minutes ago      Up 10 minutes       0.0.0.0:30003->27017/tcp   mongo3問題是當(dāng)我嘗試使用mongo-go-driver進(jìn)行 ping 時出現(xiàn)錯誤(我嘗試使用版本 1.0.0 和 1.0.2)// Create MongoDB client    client, err := mongo.NewClient(options.Client().ApplyURI("mongodb://localhost:30001"))if err != nil {    t.Fatalf("Exit error: %v", err)}ctx, cancel := context.WithTimeout(context.Background(), time.Minute)defer cancel()err = client.Connect(ctx)if err != nil {    t.Fatalf("Exit error: %v", err)}ctx, cancel = context.WithTimeout(context.Background(), time.Minute)defer cancel()// Pingerr = client.Ping(ctx, readpref.Primary())if err != nil {    t.Fatalf("Exit error Ping: %v", err)}錯誤如下:Exit error Ping: server selection error: server selection timeout        current topology: Type: ReplicaSetNoPrimary        Servers:        Addr: mongo2:27017, Type: Unknown, State: Connected, Average RTT: 0, Last error: dial tcp: lookup mongo2: no such host        Addr: mongo3:27017, Type: Unknown, State: Connected, Average RTT: 0, Last error: dial tcp: lookup mongo3: no such host        Addr: mongo1:27017, Type: Unknown, State: Connected, Average RTT: 0, Last error: dial tcp: lookup mongo1: no such host
查看完整描述

1 回答

?
楊__羊羊

TA貢獻(xiàn)1943條經(jīng)驗(yàn) 獲得超7個贊

這是由于hostnameDocker 主機(jī)未解決。在 Docker 中,實(shí)例mongo1、mongo2mongo3可以通過這些名稱訪問。但是,無法從 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 中指定。


查看完整回答
反對 回復(fù) 2023-06-19
  • 1 回答
  • 0 關(guān)注
  • 166 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號