1
votes

I'm setting up a app with docker, mongodb and nodejs (mongoose), but for some reason I'm getting a authentication error.

UserNotFound: Could not find user "testuserdb" for db "admin"

Any suggestion?

Thanks!

.env

MONGO_USERNAME=testuserdb
MONGO_PASSWORD=testuserpass
MONGO_PORT=27017
MONGO_DB=testdb

db.js (mongoose connection)

const mongoose = require('mongoose');

const {
    MONGO_USERNAME,
    MONGO_PASSWORD,
    MONGO_HOSTNAME,
    MONGO_PORT,
    MONGO_DB
  } = process.env;

  const options = {
    useNewUrlParser: true,
    reconnectTries: Number.MAX_VALUE,
    reconnectInterval: 500,
    connectTimeoutMS: 10000,
  };

const url = `mongodb://${MONGO_USERNAME}:${MONGO_PASSWORD}@${MONGO_HOSTNAME}:${MONGO_PORT}/${MONGO_DB}?authSource=admin`;

mongoose.connect(url, options).then( function() {
    console.log('MongoDB is connected');
  })
    .catch( function(err) {
    console.log(err);
  });

docker compose I use a docker environment variables to mongodb and nodejs to define the username, password, hostname db, and databasename

version: '3'

services:
  nodejs:
    build:
      context: .
      dockerfile: Dockerfile.dev
    depends_on: 
      - db
    image: nodejs
    container_name: nodejs
    restart: unless-stopped
    env_file: 
      - .env
    environment:
      - MONGO_USERNAME=$MONGO_USERNAME
      - MONGO_PASSWORD=$MONGO_PASSWORD
      - MONGO_HOSTNAME=db
      - MONGO_PORT=$MONGO_PORT
      - MONGO_DB=$MONGO_DB 
    ports:
      - "3000:3000"
    volumes:
      - .:/home/node/app
      - node_modules:/home/node/app/node_modules
    networks:
      - app-network
    #command: ./wait-for.sh db:27017 -- /home/node/app/node_modules/.bin/nodemon app.js
    command: /home/node/app/node_modules/.bin/nodemon app.js
  db:
    image: mongo:4.2.9-bionic
    container_name: db
    restart: unless-stopped
    env_file: 
      - .env
    environment: 
      - MONGO_INITDB_ROOT_USERNAME=$MONGO_USERNAME
      - MONGO_INITDB_ROOT_PASSWORD=$MONGO_PASSWORD
      - MONGO_INITDB_DATABASE=$MONGO_DB
    volumes:
      - dbdata:/data/db
    networks:
      - app-network
networks:
  app-network:
    driver: bridge
volumes:
  dbdata:
  node_modules:
1

1 Answers

1
votes

As per the information available. I think the user testuserdb exist on testdb and not on admin database.

And while defining connection url you have mentioned authSource=admin

Change one of these as per your needs.