【问题标题】:Go mgo.v2 package error: no reachable serversGo mgo.v2 包错误:没有可访问的服务器
【发布时间】:2019-03-25 00:04:08
【问题描述】:

尝试使用mgo.v2包连接mongodb服务器。我已经使用以下方式启动了服务器:

mongod --auth

我可以使用终端连接到服务器:

$ mongo -u "username" -p "password" --authenticationDatabase "db"

但是当我使用时:

mgo.Dial("mongodb://usernamer:password@127.0.0.1:27017/dbname")

它给了我一个错误提示 {"error":"no reachable servers"}。

我的 docker-compose.yml 文件如下

version: "2"
services:
  todo:
    build:
      context: .
      dockerfile: todo/Dockerfile
    restart: always
    volumes:
    - .:/go/src/prac
    container_name: todo
    ports:
    - 8800:8081
  mongodb:
    command: mongod --auth
    container_name: mongodb
    image: mongo:latest
    ports:
    - 27017:27017

【问题讨论】:

    标签: mongodb docker go docker-compose mgo


    【解决方案1】:

    问题似乎是您正在尝试连接到 127.0.0.1。 MongoDB 不在同一个容器中,所以这行不通。

    mgo.Dial("mongodb://usernamer:password@127.0.0.1:27017/dbname")
    

    您应该改为使用您选择的名称连接到您定义的 MongoDB 容器。

    mgo.Dial("mongodb://usernamer:password@mongodb:27017/dbname")
    

    Docker Compose 为您的容器创建一个network,它们可以在其中使用您定义为主机名的名称相互访问。请注意,您不需要为容器相互访问定义ports;这些只需要从 Docker 外部访问容器。

    【讨论】:

    • 嗨迈克尔。万分感谢。只是一个跟进。如何为 MongoDB 容器创建用户。当我尝试连接时,它给了我一个 SASL 身份验证错误。我的意思是我创建的 db、collection、user 和 pass 是通过 mongo shell 实现的。
    • 这似乎是一个不同的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 2016-11-11
    • 1970-01-01
    相关资源
    最近更新 更多