从本地计算机连接Docker mongo集群

时间:2019-06-05 13:06:12

标签: mongodb docker

我在本地计算机上的docker中创建了mongodb副本。配置完成后,如果我在容器内部进行连接,副本就可以正常工作。然后,当我从计算机但在容器外部连接localhost:30001、30002、30003时,它说连接失败,并提示以下错误消息。

SERVER [node1:27017] (Type: UNKNOWN)
|_/ Connection error (MongoSocketOpenException): Exception opening socket
|____/ Unknown host: node3

SERVER [node2:27017] (Type: UNKNOWN) 
|_/ Connection error (MongoSocketOpenException): Exception opening socket
|____/ Unknown host: node2

SERVER [node1:27017] (Type: UNKNOWN) 
|_/ Connection error (MongoSocketOpenException): Exception opening socket
|____/ Unknown host: node1

这是我的docker-comopse文件

version: '3'
services:
  node1:
    image: mongo
    container_name: "node1"
    networks:
      - mongocluster
    ports:
      - 30001:27017
    command: mongod  --dbpath /data/db --replSet repset
  node2:
    image: mongo
    container_name: "node2"
    networks:
      - mongocluster
    ports:
      - 30002:27017
    command: mongod  --dbpath /data/db --replSet repset
    depends_on:
      - node1
  node3:
    image: mongo
    container_name: "node3"
    networks:
      - mongocluster
    ports:
      - 30003:27017
    command: mongod  --dbpath /data/db --replSet repset
    depends_on:
      - node2
networks:
  mongocluster:
    driver: bridge

这就是我在mongodb中配置集群的方式

config = {
  "_id": "repset",
  "members": [
    {
      "_id": 0,
      "host": "node1:27017"
    },
    {
      "_id": 1,
      "host": "node2:27017"
    },
    {
      "_id": 2,
      "host": "node3:27017"
    }
  ]
}

我了解我的本地计算机无法解释node1,node2和node3的IP。我只是将其用于开发目的,那么修复它的最快方法(也许是肮脏的)是什么?

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

您的猜测是正确的。 Mongo的副本将自我报告的节点1、2、3设置为IP地址,而您的客户端来自容器网络外部,则尝试[未成功]到达这些地址。

一种简单的解决方法是将客户端放在同一个docker网络中的容器内。

另一个[dirty]选项-调整本地计算机上的hosts文件,以将nodeX解释为本地主机。您需要调整端口号,以便主机和容器的端口号相同(在容器中的30001,2,3上启动mongo)

也许是最简单的一种-不用担心副本集,而只需运行独立的mongo容器即可。