尝试连接到mongodb容器时,GOLANG客户端docker容器变得无法访问

克里斯·阿德金:

我有一个用golang编写的简单程序,该程序因此连接到mongodb实例:

func main() {
    session, err := mgo.Dial("localhost:27017")    

    if err != nil {
        panic(err)
    }

    defer session.Close()
    session.SetMode(mgo.Monotonic, true)
    ensureIndex(session)
}

我使用docker compose启动了两个容器,一个启动了我的GOLANG API,另一个启动了mongo:

version: "3.3"

services:
  api:
    image: golang:latest
    volumes:
      - .:/go
    working_dir: /go
    environment:
      - GOPATH=/go
    command:
      go run /go/src/main.go
    ports:
      - "8082:8000"
    depends_on: 
      - db
    networks:
      - api-net    

  db:
    build: .
    expose:
      - '27017'
    container_name: 'mongo'
    ports:
      - "27017:27017"
    networks:
      - api-net

networks:
  api-net:
    driver: bridge

我使用Dockerfile来配置一个conf文件来启动mongo,该conf文件将实例设置为绑定到所有IPV4和IPV6网络:

FROM mongo:latest

COPY mongod.conf /etc/mongod.conf
CMD mongod --config /etc/mongod.conf##

这是mongod.conf文件:

systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0

当我运行docker-compose.up时,我得到的是:

Building db
Step 1/3 : FROM mongo:latest
 ---> a0f922b3f0a1
Step 2/3 : COPY mongod.conf /etc/mongod.conf
 ---> Using cache
 ---> f270e718c11e
Step 3/3 : CMD mongod --config /etc/mongod.conf
 ---> Running in 89ffc2495a2a
Removing intermediate container 89ffc2495a2a
 ---> fe2677d53122

Successfully built fe2677d53122
Successfully tagged carsupermarket_db:latest
WARNING: Image for service db was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating mongo ... done
Creating carsupermarket_api_1 ... done
Attaching to mongo, carsupermarket_api_1
api_1  | panic: no reachable servers
api_1  |
api_1  | goroutine 1 [running]:
api_1  | main.main()
api_1  |        /go/src/main.go:38 +0x291
api_1  | exit status 2

我拖曳了Google和stackoverflow,我唯一能找到的与我的问题模糊相关的是:

mongod --bind_ip使用docker-compose版本2

但是,我的docker-compose.yml文件在书面工作中仍为“应该”。

有人可以向我指出正确的方向,为什么我的GOLANG代码找不到我的mongodb实例。

扎克:

我认为,当您调用mgo.Dial("localhost:27017")localhost部件它是指golang容器中的localhost,而不是容器在其上运行的主机。

Docker会将容器名称解析为主机名,将拨号更改为mgo.Dial("mongo:27017"),它应该可以工作。

来自Docker容器联网桥文档

用户定义的网桥可在容器之间提供自动DNS解析。

默认网桥网络上的容器只能通过IP地址互相访问,除非您使用--link选项(这被认为是旧的)。在用户定义的网桥网络上,容器可以通过名称或别名相互解析。

https://docs.docker.com/network/bridge/

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

无法使用mysql客户端从docker主机连接到作为docker容器运行的Mysql 5.7

当客户端连接到OpenVPN时,为什么LAN客户端计算机无法访问?

无法从Docker容器(node.js客户端)连接到Elasticsearch

远程客户端无法连接到在Azure VM中运行的Redisai Docker容器

浏览器客户端无法连接到 Docker 容器中的 DynamoDB

测试docker容器中的Python mqtt客户端连接到mqtt代理docker容器

错误:连接到运行中的容器时,客户端网络套接字在建立安全TLS连接之前已断开连接-Docker远程容器

通过Docker容器进行Akka.net远程处理:客户端随机无法连接到主机

当多个客户端尝试连接时,多线程服务器给出“无法访问已处置的对象”错误

尝试在无法访问的 IP 上连接通道时 gRPC C++ 客户端阻塞

linux openvpn客户端连接到服务器但无法访问Internet

无法连接到Docker容器中的mongodb

Docker容器无法连接到远程MongoDB

无法连接到 docker 容器中的 mongoDB

Docker容器中的Docker Golang客户端

无法从 Golang 容器连接到 Postgres docker 容器

尝试到达Docker容器时“无法连接”

从静态客户端访问Docker容器的IP地址

无法访问Docker容器

无法访问DOCKER容器

无法连接到Docker容器

将Thrift客户端连接到同一主机上单独docker容器中的Thrift服务器

mongodb客户端库无法连接到副本集

尝试将Docker容器连接到mongodb时出现异常打开套接字异常

Docker容器中的Eureka客户端

com.mongodb.MongoSocketOpenException:连接到mongodb docker容器时

错误:运行Docker容器时无法访问jarfile

创建客户端时无法连接到twilsock

无法从 golang Docker 容器连接到 Postgres 数据库