'docker mongo for single (primary node only) replica set (for development)?

This is the portion of the dockerfile that has served us well to date. However, now I need to convert this to be a single node replica set (for transactions to work). I don't want any secondary or arbiter - just the primary node. What am I missing to get this working?

mongo:
  image: mongo:4.4.3
  container_name: mongo
  restart: unless-stopped
  environment:
    MONGO_INITDB_ROOT_USERNAME: root
    MONGO_INITDB_ROOT_PASSWORD: myPass
  command: mongod --port 27017
  ports:
    - '27017:27017'
  volumes:
    - ./data/mongodb:/data/db
    - ./data/mongodb/home:/home/mongodb/
    - ./configs/mongodb/mongo-init.sh:/docker-entrypoint-initdb.d/mongo-init.sh:ro


Solution 1:[1]

Got it working. I inserted the following into the block in my question above:

hostname: mongodb
volumes:
  - ./data/mongodb/data/log/:/var/log/mongodb/
# the healthcheck avoids the need to initiate the replica set
healthcheck:
  test: test $$(echo "rs.initiate().ok || rs.status().ok" | mongo -u root -p imagiaRoot --quiet) -eq 1
  interval: 10s
  start_period: 30s

Solution 2:[2]

I was unable to initiate the replica set via the healthcheck. I used the bash script below instead. For Windows users, be sure to call your DB with the name of your computer. For example: mongodb://DESKTOP-QPRKMN2:27017

run-test.sh

#!/bin/bash

echo "Running docker-compose"
docker-compose up -d

echo "Waiting for DB to initialize"
sleep 10

echo "Initiating DB"
docker exec mongo_container mongo --eval "rs.initiate();"

echo "Running tests"

# test result
if go test ./... -v
then
  echo "Test PASSED"
else
  echo "Test FAILED"
fi

# cleanup
docker-compose -f docker-compose.test.yml down

docker-compose file

version: '3.8'
services:
  mongo:
    hostname: $HOST
    container_name: mongo_container
    image: mongo:5.0.3
    volumes:
      - ./test-db.d
    expose:
      - 27017
    ports:
      - "27017:27017"
    restart: always
    command: ["--replSet", "test", "--bind_ip_all"]

This forum post was very helpful: https://www.mongodb.com/community/forums/t/docker-compose-replicasets-getaddrinfo-enotfound/14301/4

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Mike
Solution 2