version: '3.8'
services:
  db:
    image: mongo
    container_name: mongodb
    command: mongod --replSet rs0
    restart: unless-stopped
    ports:
      - 27018:27017
    volumes:
      - db-data:/data
  setup:
    image: mongo
    depends_on:
      - db
    restart: on-failure
    entrypoint: [
        'bash',
        '-c',
        # This will try to initiate the replica set, until it succeeds twice (i.e. until the replica set is already initialized)
        'mongosh --host db:27017 --eval ''try {rs.initiate();} catch (err) { if(err.codeName !== "AlreadyInitialized") throw err };'''
      ]

volumes:
  db-data:
