Skip to content

Instantly share code, notes, and snippets.

@asoorm
Created September 14, 2018 19:00
Show Gist options
  • Star 86 You must be signed in to star a gist
  • Fork 21 You must be signed in to fork a gist
  • Save asoorm/7822cc742831639c93affd734e97ce4f to your computer and use it in GitHub Desktop.
Save asoorm/7822cc742831639c93affd734e97ce4f to your computer and use it in GitHub Desktop.
Mongo Replica Set docker compose
version: "3"
services:
mongo1:
hostname: mongo1
container_name: localmongo1
image: mongo:4.0-xenial
expose:
- 27017
ports:
- 27011:27017
restart: always
entrypoint: [ "/usr/bin/mongod", "--bind_ip_all", "--replSet", "rs0" ]
mongo2:
hostname: mongo2
container_name: localmongo2
image: mongo:4.0-xenial
expose:
- 27017
ports:
- 27012:27017
restart: always
entrypoint: [ "/usr/bin/mongod", "--bind_ip_all", "--replSet", "rs0" ]
mongo3:
hostname: mongo3
container_name: localmongo3
image: mongo:4.0-xenial
expose:
- 27017
ports:
- 27013:27017
restart: always
entrypoint: [ "/usr/bin/mongod", "--bind_ip_all", "--replSet", "rs0" ]
Copy link

ghost commented Oct 5, 2021

I can run everything perfectly but I can not connect to the set by any client.

i have same problem
hel;p

Error:
getaddrinfo ENOTFOUND mongodb-primary

Copy link

ghost commented Oct 5, 2021

If that helps, bitnami/mongodb is a super good image.

  mongodb:
    image: bitnami/mongodb
    environment:
      MONGODB_REPLICA_SET_MODE: primary
      ALLOW_EMPTY_PASSWORD: "yes"

How did you configure the port

@nguyenduyhust
Copy link

I have setup everything in this https://github.com/nguyenduyhust/docker-mongodb-replica-set.
Great if that's what you're looking for.

@smaillns
Copy link

smaillns commented Apr 18, 2022

When I tried to connect with string URI mongodb://localhost:27011,localhost:27012,localhost:27013/?replicaSet=rs0 using Compass I got the following error
getaddrinfo EAI_AGAIN mongo1

@BrunoSilvaAndrade
Copy link

BrunoSilvaAndrade commented Oct 25, 2022

By the way, you all would have to expose all Mongo replicaset instances ports in order to get connected to them, so I think It's redundant being exposing ports, It's better to use host network mode.

I was looking for a simple Compose for this and, unfortunately, I didn't find one complete and simple at the same time, because of that I made one as simple as possible where the secondary ones ingress their selfies on the master without any third-party script.

I hope you all find it useful

version: "3"
services:
  node0:
    image: mongo
    restart: always
    command: --replSet rs0 --bind_ip_all
    network_mode: host
    healthcheck:
      test: >
        mongosh --eval "try{rs.initiate().ok}catch(e){rs.status().ok}"
      interval: 3s

  node1:
    image: mongo
    depends_on:
      - node0
    restart: always
    command: --replSet rs0 --bind_ip_all --port 27018
    network_mode: host
    environment:
      PORT: 27018
    healthcheck:
      test: >
        mongosh --host localhost:27017 --eval "var me = '$${HOSTNAME}:$${PORT}'; rs.status().members.some(m => m.name == me) || rs.add({host: me})"
      interval: 3s

  node2:
    image: mongo
    depends_on:
      - node0
    restart: always
    command: --replSet rs0 --bind_ip_all --port 27019
    network_mode: host
    environment:
      PORT: 27019
    healthcheck:
      test: >
        mongosh --host localhost:27017 --eval "var me = '$${HOSTNAME}:$${PORT}'; rs.status().members.some(m => m.name == me) || rs.add({host: me})"
      interval: 3s

@vespina
Copy link

vespina commented Jun 29, 2023

docker exec -it mongodb /bin/bash

This worked perfectly for me to create and start the mongodb set on docker containers. I can also connect to any of the servers using compass. But when I tried to open a connection from another server in the docker network (a php server), using php mongodb client, I got "Authentication failed" using this url:

mongodb://172.24.0.5:27017,172.24.0.3:27017,172.24.0.4:27017?replicaSet=dbrs

I am also sending my username and password, same that I am using in the compass connection url. The internal ips are correct, so that is not the problem.

So, basically, replicaset is up and running, I can connect from MongoDB Compass but I can't connect from my PHP code from a docker container in the same docker network.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment