首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Go mongo驱动程序无法连接到mongodb容器。

Go mongo驱动程序无法连接到mongodb容器。
EN

Stack Overflow用户
提问于 2020-03-18 15:05:21
回答 3查看 864关注 0票数 2

我使用的是一个简单的go,它使用MongoDB并将其移动到坞容器中。由于某些原因,我无法连接到MongoDB。经过研究,我找不到解决办法。

我试过:

  • Exposing/publishing端口,所以在尝试连接到客户端时,我可以使用容器名而不是'mongodb:localhost:27017/‘。
  • 我还删除了compose.yml文件中的任何网络配置,这样就不会出现网络混乱。

这是我的compose.yml文件:

代码语言:javascript
复制
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文档:

代码语言:javascript
复制
FROM golang:1.14
WORKDIR /go/src/app
COPY . .

RUN go get -d -v ./...
RUN go install -v ./...

EXPOSE 80

这就是我试图连接到客户端的方式:

代码语言:javascript
复制
// Set client options
clientOptions := options.Client().ApplyURI("mongodb://mongodb:27017")

// Connect to MongoDB
Client, _ = mongo.Connect(context.TODO(), clientOptions)

// Check the connection
err := Client.Ping(context.TODO(), nil)
if err != nil {
    log.Fatal(err)
}

当试图平压客户端以检查连接时,程序正在记录一个致命错误。

日志输出:

代码语言:javascript
复制
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 +0x21c
main.main()
/go/src/app/main.go:30 +0x16f

我知道这是某种网络问题,但我不知道为什么它不起作用,我有一种感觉,那就是我错过了一些简单的东西。

如果需要的话,请询问我更多的信息,并提前感谢您的帮助。

编辑:我可以从我的go_todo容器中平掉主机名mongodb,所以不确定它是否是网络问题。

EN

回答 3

Stack Overflow用户

发布于 2020-03-18 19:19:31

是的,这是有点混乱(读:烦人)的一部分使用码头-撰写。

名为mongodb的服务不是您将ApplyURI设置为的容器名称。docker-将“项目名称”作为容器名称的前缀。

运行一个docker ps并查找'NAMES‘列(应该是最后一个)。为URI主机使用mongodb实例的名称,它应该连接。

票数 2
EN

Stack Overflow用户

发布于 2020-03-18 21:27:11

我太蠢了,显然是个码头工人。

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

谢谢你的评论,尽管我很感激!

票数 0
EN

Stack Overflow用户

发布于 2021-01-04 10:32:56

您应该调试代码并检查哪个对象是Nil。也许您正在调用Nil对象上的方法。

我建议您显式地创建一个Docker network,并将您的MongoDB停靠实例和应用程序附加到它。然后使用容器名访问MongoDB。我也面临着连接问题,我用Docker network解决了这个问题。

正如@CenterOrbit建议的那样,显式地命名容器,否则对接者会给它一个随机的名称,您将无法连接到MongoDB。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60742259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档