1

I'm trying to run a single mongodb instance in replica set mode to enable the use of transactions.

I have the following docker-compose.yml:

version: "3.7"

services:
  mongo:
    container_name: mongo-database
    image: mongo:6.0.4
    restart: unless-stopped
    env_file:
      - .env
    ports:
      - "27017:27017"
    volumes:
      - ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js
    hostname: localhost
    networks:
      - mongo-network
    command: ["--replSet", "rs0"]

networks:
  mongo-network:
    external: true

And here is the mongo-init.js file:

rs.initiate({ _id: 'rs0', members: [{ _id: 0, host: 'localhost:27017' }] })

db = db.getSiblingDB('mydb')

db.createUser({
    user: 'dev',
    pwd: 'dev',
    roles: [{ role: 'root', db: 'mydb' }]
})

The docker image runs fine and I have no error message in the logs.

But I'm unable to connect to the database using mongoose or any mongodb client. I got an authentication error and there is the following error message in the mongo's logs:

mongo-database | {"t":{"$date":"2023-03-20T14:44:41.072+00:00"},"s":"I",  "c":"ACCESS",   "id":20249,   "ctx":"conn62","msg":"Authentication failed","attr":{"mechanism":"SCRAM-SHA-1","speculative":false,"principalName":"dev","authenticationDatabase":"mydb","remote":"172.22.0.1:47208","extraInfo":{},"error":"UserNotFound: Could not find user \"dev\" for db \"mydb\""}}

I'm using the URI mongodb://localhost:27017/mydb?replicaSet=rs0 with dev and dev as login and password.

What am I doing wrong?

Magus
  • 14,796
  • 3
  • 36
  • 51
  • 2
    Role `root` exist only in database `admin`. See also https://stackoverflow.com/questions/63754742/authentication-failure-while-trying-to-save-to-mongodb/63755470#63755470 and after `rs.initiate()` you may add `while (! db.isMaster().ismaster ) { sleep(1000) } ` to wait till initiate is finished – Wernfried Domscheit Mar 20 '23 at 14:58

0 Answers0