使用本地 Mongo 连接对 Go 应用程序进行 Docker 化
使用 Docker 处理 Golang 项目时,集成本地 MongoDB 数据库会带来连接挑战。如果使用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中文网其他相关文章!