MongoDB Golang驱动程序尝试连接到本地主机而不是Docker主机

时间:2020-07-14 13:33:54

标签: mongodb docker go docker-compose

错误

app        | 2020/07/14 13:19:00 server selection error: server selection timeout, current topology: { Type: Unknown, Servers: [{ Addr: localhost:27017, Type: Unknown, State: Connected, Average RTT: 0, Last error: connection() : dial tcp 127.0.0.1:27017: connect: connection refused }, ] }

我正在使用docker-compose管理golang应用程序和mongo db(无副本集)实例。 docker-compose文件内容:

version: '3.1'

services:

  mongodb:
    image: mongo
    container_name: mongodb
    restart: always
    ports:
          - 27017:27017
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: local
    command: mongod --bind_ip mongodb


  app:
    image: app:1.4
    container_name: app
    environment:
      - MONGO_URL=mongodb
    ports:
         - 80:8080
    depends_on:
      - mongodb
    restart: always

运行Docker容器:

docker ps
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                      NAMES
d130336be71e        app:1.4   "/app/main"              4 minutes ago       Up 2 seconds        0.0.0.0:80->8080/tcp       app
dc57dd2de645        mongo                "docker-entrypoint.s…"   4 minutes ago       Up 2 seconds        0.0.0.0:27017->27017/tcp   mongodb

用于将Golang应用与MongoDB连接

我正在使用官方的mongodb go驱动程序(go.mongodb.org/mongo-driver/mongo),我的代码正在尝试连接到Docker主机(mongodb):

var dbUser string = "root"
var dbPassword string = "local"
dbURL := os.Getenv("MONGO_URL")
clientOptions := options.Client()
    clientOptions.SetDirect(true).ApplyURI("mongodb://" + dbUser + ":" + dbPassword + "@" + dbURL +":27017/?connect=direct")

问题排查

  1. 作为试图找出问题所在的一部分,我查看了stackoverflow中突出显示的类似问题并尝试了以下选项:
    • 试图在连接URI中使用connect = direct
    • 试图使用SetDirect
    • 添加了--bindip,如我的docker-compose文件中突出显示的
  2. 我登录到应用容器,并尝试ping mongodb并成功:
root@d130336be71e:/app# ping mongodb
PING mongodb (172.18.0.2) 56(84) bytes of data.
64 bytes from mongodb.app_default (172.18.0.2): icmp_seq=1 ttl=64 time=0.159 ms
64 bytes from mongodb.app_default (172.18.0.2): icmp_seq=2 ttl=64 time=0.200 ms
64 bytes from mongodb.app_default (172.18.0.2): icmp_seq=3 ttl=64 time=0.079 ms
64 bytes from mongodb.app_default (172.18.0.2): icmp_seq=4 ttl=64 time=0.087 ms
64 bytes from mongodb.app_default (172.18.0.2): icmp_seq=5 ttl=64 time=0.083 ms
^C
--- mongodb ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 60ms
rtt min/avg/max/mdev = 0.079/0.121/0.200/0.050 ms

尝试了这些选项后,我对Golang相当陌生,因此正在寻求Golang社区的帮助。

预先感谢。

0 个答案:

没有答案