使用本地Mongo 連線對Go 應用程式進行Docker 化
使用Docker 處理Golang 專案時,整合本地Mongo 資料庫會帶來連線挑戰。如果使用MongoDB的Go專案在Docker之外運行,則資料庫連線成功。但是,當同一個專案在 Docker 容器中執行時,連線會失敗。
了解問題
Docker 為容器化應用程式建立虛擬環境。這意味著容器在獨立的網路空間中運行,與主機系統不同。因此,連接到外部資源(例如本地運行的 MongoDB 實例)會出現問題。
解決方案:利用host.docker.internal
Docker 分配唯一的IP 位址為每個容器提供一個特殊的主機名稱“host.docker.internal” 。此主機名稱可作為從容器內連接到主機系統的閘道。由於 MongoDB 在主機系統本地運行,使用“host.docker.internal”作為其主機名稱可以解決連線問題。
修改Dockerfile
合併此解決方案,修改Dockerfile 如下:
FROM golang WORKDIR $GOPATH/src/myapp ADD . /go/src/myapp RUN go get ./... RUN go install myapp ENV MONGO_HOST=host.docker.internal CMD /go/bin/myapp --mongodbhost=$MONGO_HOST EXPOSE 8080 EXPOSE 27017
連接字符串
在Go 應用程式中,更新MongoDB 連線字串以使用「host.docker.internal」作為主機名稱。例如:
connectionString := fmt.Sprintf("mongodb://host.docker.internal:21017/database") client, err := mongo.Connect(ctx, options.Client().ApplyURI(connectionString))
以上是如何將 Docker 容器中的 Go 應用程式連接到本機 MongoDB 實例?的詳細內容。更多資訊請關注PHP中文網其他相關文章!