【真坑】docker-compose搭建的mongoDB副本集群无法连接,但是可以单独连接每个节点

@Ta 2022-12-28发布,2022-12-28修改 2997点击

来看,docker-compose搭建 mongoDB 副本集群, 一个主节点,一个副本,一个裁判。 同一台服务器上,使用docker映射三个端口

navicat 连接集群问题,单个节点可以连,集群连不上.

version: '3.1'
services:
  mongo-main:
    build:
      context: mongo-replica-build
    #restart: always
    ports:
      - 27017:27017
    volumes:
      #- $PWD/script/:/docker-entrypoint-initdb.d/
      - $PWD/mongo-main:/data/db
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: pass
    command: --replSet rs1 --keyFile /data/keyFile --bind_ip=0.0.0.0
  mongo-1:
    build:
      context: mongo-replica-build
    ports:
      - 27018:27017
    #restart: always
    volumes:
      - $PWD/mongo-1:/data/db
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: pass
    command: --replSet rs1 --keyFile /data/keyFile  --bind_ip=0.0.0.0
  mongo-2:
    build:
      context: mongo-replica-build
    ports:
      - 27019:27017
    #restart: always
    volumes:
      - $PWD/mongo-2:/data/db
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: pass
    command: --replSet rs1 --keyFile /data/keyFile --bind_ip=0.0.0.0

使用navicat连接集群出现 No suitable servers found: 'serverSelectionTimeoutMS'expired: (Failed to resolve

af981dd6536edc86edb4c9d2c4414dc.png(32.51 KB)

原因 : 是hostname将会作为MongoDB内部交叉连接,和外部第三方客户端 二次连接 的host

分析

我这个机器是 局域网的,然后docker-compose部署的,刚才启动后,设置集群我是 rs.add( mongo-1 ) ,这个mongo-1在docker容器中是有hosts的,因为是在同一个docker-compose中,

我现在副本集群

rs.initiate({
    _id: "rs1",
    members:[
        { _id: 0, host: "192.168.2.201:27017" },
        { _id: 1, host: "192.168.2.201:27018" },
        { _id: 2, host: "192.168.2.201:27019", arbiterOnly: true } 
    ]
})

添加后,我的navicat就能连上了

这是有问题的 rs.status();

image.png(72.9 KB)

这是没问题的

c562dc37d6c298dfaf355ff144246b6.png(6.67 KB)

集群连接搞定

image.png(41.24 KB)

回复列表(0|隐藏机器人聊天)
帖子没有回复
添加新回复
回复需要登录