亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

Go mongo-driver 無法連接到 mongodb 容器

Go mongo-driver 無法連接到 mongodb 容器

Go
九州編程 2022-05-23 15:48:40
我正在使用一個簡單的 go CRUD api,它使用 MongoDB 并將其移動到 docker 容器。由于某種原因,我無法連接到 MongoDB。經過研究,我找不到解決方案。我試過了:公開/發布端口,因此我可以在嘗試連接到客戶端時使用容器名稱而不是 'mongodb:localhost:27017/'。我還刪除了 compose.yml 文件中的所有網絡配置,以免網絡混亂。這是我的 compose.yml 文件:version: '3.4'    services:    mongodb:      image: mongo:4.0.4      restart: always      ports:        - 27017:27017          mongo_todo:      build: ./mongo_todo      ports:         - 3000:3000      depends_on:        - mongodb          go_todo:    build: ./go_todo    ports:      - 80:80    depends_on:      - mongo_todo這是我的 mongo_todo Dockerfile:FROM golang:1.14WORKDIR /go/src/appCOPY . .RUN go get -d -v ./...RUN go install -v ./...EXPOSE 80這就是我嘗試連接到客戶端的方式:// Set client optionsclientOptions := options.Client().ApplyURI("mongodb://mongodb:27017")// Connect to MongoDBClient, _ = mongo.Connect(context.TODO(), clientOptions)// Check the connectionerr := Client.Ping(context.TODO(), nil)if err != nil {    log.Fatal(err)}該程序在嘗試 ping 客戶端以檢查連接時記錄一個致命錯誤。日志輸出:panic: runtime error: invalid memory address or nil pointer dereference[signal SIGSEGV: segmentation violation code=0x1 addr=0x2e0 pc=0x9a798c]goroutine 1 [running]:go.mongodb.org/mongo-driver/mongo.(*Client).Ping(0x0, 0xd61e20, 0xc000028030, 0x0, 0x1, 0x0)/go/src/go.mongodb.org/mongo-driver/mongo/client.go:229 +0x21cmain.main()/go/src/app/main.go:30 +0x16f我知道這是某種網絡問題,但我不知道為什么它不起作用,我覺得我缺少一些簡單的東西。如果需要,請向我詢問更多信息,并提前感謝您的幫助。編輯:我可以從我的 go_todo 容器中 ping 主機名 mongodb,所以不確定這是否是網絡問題。
查看完整描述

3 回答

?
回首憶惘然

TA貢獻1847條經驗 獲得超11個贊

是的,這在使用 docker-compose 時有點令人困惑(閱讀:煩人)。

調用的服務mongodb不是您設置的容器名稱ApplyURI。docker-compose 為容器名稱添加一個“項目名稱”前綴。

運行 adocker ps并查找列“ NAMES ”(應該是最后一個)。使用 mongodb 實例的名稱作為 URI 主機,它應該可以連接。


查看完整回答
反對 回復 2022-05-23
?
蕪湖不蕪

TA貢獻1796條經驗 獲得超7個贊

您應該調試代碼并檢查哪個對象是 Nil。也許您正在調用 Nil 對象的方法。

我會建議您顯式創建一個Docker networkMongoDB docker 實例和應用程序并將其附加到它。然后使用容器名稱訪問您的 MongoDB。我也遇到了連接問題,我使用Docker network.

正如@CenterOrbit建議的那樣,明確命名您的容器,否則 docker 會給它一個隨機名稱,您將無法連接到 MongoDB。


查看完整回答
反對 回復 2022-05-23
?
GCT1015

TA貢獻1827條經驗 獲得超4個贊

我是如此愚蠢,顯然是一個碼頭菜鳥。

我以為docker-compose up重建了我的容器映像,但它沒有,所以我的更改沒有被使用。

謝謝你的評論,雖然我很感激!


查看完整回答
反對 回復 2022-05-23
  • 3 回答
  • 0 關注
  • 199 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號