Search code examples
mongodbdocker-composereplicaset

how to run mongodb replica set in docker compose


I have tried to run mongodb replicaSet in local with mongoldb-community in my Mac I follow mongodb doc I can run it by this command

mongod --port 27017 --dbpath /usr/local/var/mongodb --replSet rs0 --bind_ip localhost,127.0.0.1

but it doesn't run on background, so every time I want to start replica set mongodb I should run that command, before I run it I should stop mongo first, then on the next tab console I should run mongo --eval "rs.initiate()" to create to replicaSet again

here is my docker compose:

services:
  mongodb_container:
    image: mongo:latest
    ports:
      - 27017:27017
    volumes:
      - mongodb_data_container:/data/db

volumes:
  mongodb_data_container:

how to convert that into docker-compose ? is it possible ?

can I do docker exec CONTAINER_ID [commands] ? to run command mongo like above , but must stop the mongodb run in that docker ?


Solution

  • You can have a mongodb replica-set with this docker-compose

    services:
    
      mongodb-primary:
        image: "bitnami/mongodb:4.2"
        user: root
        volumes:
          - ./mongodb-persistence/bitnami:/bitnami
        networks:
          - parse_network
        environment:
          - MONGODB_REPLICA_SET_MODE=primary
          - MONGODB_REPLICA_SET_KEY=123456789
          - MONGODB_ROOT_USERNAME=admin-123
          - MONGODB_ROOT_PASSWORD=password-123
          - MONGODB_USERNAME=admin-123
          - MONGODB_PASSWORD=password-123
          - MONGODB_DATABASE=my_database
        ports:
          - 27017:27017
    
      mongodb-secondary:
        image: "bitnami/mongodb:4.2"
        depends_on:
          - mongodb-primary
        environment:
          - MONGODB_REPLICA_SET_MODE=secondary
          - MONGODB_REPLICA_SET_KEY=123456789
          - MONGODB_PRIMARY_HOST=mongodb-primary
          - MONGODB_PRIMARY_PORT_NUMBER=27017
          - MONGODB_PRIMARY_ROOT_USERNAME=admin-123
          - MONGODB_PRIMARY_ROOT_PASSWORD=password-123
        networks:
          - parse_network
        ports:
          - 27027:27017
    
      mongodb-arbiter:
        image: "bitnami/mongodb:4.2"
        depends_on:
          - mongodb-primary
        environment:
          - MONGODB_ADVERTISED_HOSTNAME=mongodb-arbiter
          - MONGODB_REPLICA_SET_MODE=arbiter
          - MONGODB_PRIMARY_HOST=mongodb-primary
          - MONGODB_PRIMARY_PORT_NUMBER=27017
          - MONGODB_PRIMARY_ROOT_PASSWORD=password-123
          - MONGODB_REPLICA_SET_KEY=123456789
        networks:
          - parse_network
        ports:
          - 27037:27017
    
    networks:
      parse_network:
        driver: bridge
        ipam:
          driver: default
    volumes:
      mongodb_master_data:
        driver: local