mongodbmongodb-compassstudio3t

MongoDB Compass disconnects immediately


I'm trying to connect to MongoDB with MongoDB Compass 1.20.4

My connection string is:

mongodb://localhost:27017/?replicaSet=rs0

Here is my MongoDB docker setup:

version: '3'
services:
  mongo0:
    hostname: mongo0
    container_name: mongo0
    image: mongo
    ports:
      - 27017:27017
    restart: always
    entrypoint: [ "/usr/bin/mongod", "--bind_ip_all", "--replSet", "rs0" ]
  mongo1:
    hostname: mongo1
    container_name: mongo1
    image: mongo
    ports:
      - 27018:27017
    restart: always
    entrypoint: [ "/usr/bin/mongod", "--bind_ip_all", "--replSet", "rs0" ]
  mongosetup:
    hostname: mongosetup
    container_name: mongosetup
    image: mongo
    depends_on:
      - mongo0
      - mongo1
    volumes:
      - ./scripts/:/scripts
    restart: "no"
    entrypoint: [ "bash", "/scripts/mongo-setup.sh" ]

mongo-setup.sh

#!/bin/bash
sleep 10
mongo --host mongo0:27017 <<EOF
  var config={"_id":"rs0","members":[{"_id":0,"host":"mongo0:27017"},{"_id":1,"host":"mongo1:27017"}]};
  rs.initiate(config);
EOF

Here is what I see in my docker logs:

mongo0            | 2020-02-02T14:42:35.114+0000 I  NETWORK  [listener] connection accepted from 172.27.0.1:55494 #31 (4 connections now open)
mongo0            | 2020-02-02T14:42:35.115+0000 I  NETWORK  [conn31] received client metadata from 172.27.0.1:55494 conn31: { driver: { name: "nodejs", version: "3.4.0" }, os: { type: "Darwin", name: "darwin", architecture: "x64", version: "19.3.0" }, platform: "'Node.js v10.2.0, LE (unified)", application: { name: "MongoDB Compass" } }
mongo0            | 2020-02-02T14:42:35.120+0000 I  NETWORK  [conn31] end connection 172.27.0.1:55494 (3 connections now open)

Prior to using replica set it connected just fine, also Studio 3T works perfectly with this setup. Would appreciate any help


Solution

    1. Changing Read Preference in MongoDB Compass to Primary Preferred fixed the connection issue.
    2. Then I noticed that I cannot modify/delete anything from the GUI, basically I was connected via read-only mode. After looking closely at MongoDB logs I noticed that my PRIMARY set was available at port 27018 and not 27017 I connected to.

    I tweaked my mongo-setup.sh to always make set at port 27017 PRIMARY (set priority option):

    #!/bin/bash
    # https://docs.mongodb.com/manual/tutorial/force-member-to-be-primary/
    sleep 10
    mongo --host mongo0:27017 <<EOF
      var config={"_id":"rs0","members":[{"_id":0,"host":"mongo0:27017","priority":1},{"_id":1,"host":"mongo1:27017", "priority":0.5}]};
      rs.initiate(config);
    EOF
    echo 'Finished mongo setup'
    

    Links for reference:
    Replica Set Elections

    Force a Member to Become Primary