'Mongo Authentication failed after docker-compose up

I'm trying to automate my local dev environment with a mongo docker instance. If I up the image with no users or auth, I can connect fine but when I try to create users through the compose file, I get an error. What am I doing wrong or what do I need to do so that I can admin as root and read/write as catalog?

I've tried several combinations of adding/removing the following

  • MONGO_INITDB_ROOT_USERNAME
  • MONGO_INITDB_ROOT_PASSWORD
  • MONGO_INITDB_DATABASE
  • docker-entrypoint-initdb.d

docker-compose.yml

version: "3.7"

services:
  mongodb:
    image: 'mongo:latest'
    container_name: 'mongodb'
    restart: always
    environment:
      - MONGO_INITDB_ROOT_USERNAME='root'
      - MONGO_INITDB_ROOT_PASSWORD='root'
      - MONGO_INITDB_DATABASE='root-db'
    ports:
      - '27017:27017'
    volumes:
     - './data/db:/data/db'
     - './init-mongo.js:/docker-entrypoint-initdb.d/init-mongo.js:ro'

init-mongo.js

print('Start #################################################################');

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

db.createUser(
  {
    user: 'catalog',
    pwd: 'test123test',
    roles: [
     { role: "readWrite", db: "Catalog" }
    ]
  }
)

print('END #################################################################');

Result is

PS C:\dev\docker\mongo> docker exec -it mongodb bash
root@0d4c31027a45:/# mongo --username root --password root --authenticationDatabase admin
MongoDB shell version v5.0.7
connecting to: mongodb://127.0.0.1:27017/?authSource=admin&compressors=disabled&gssapiServiceName=mongodb
Error: Authentication failed. :
connect@src/mongo/shell/mongo.js:372:17
@(connect):2:6
exception: connect failed
exiting with code 1

I've confirmed the users are created by viewing the docker-compose up logs

mongodb  | {"t":{"$date":"2022-04-23T16:30:56.325+00:00"},"s":"I",  "c":"NETWORK",  "id":51800,   "ctx":"conn3","msg":"client metadata","attr":{"remote":"127.0.0.1:36968","client":"conn3","doc":{"application":{"name":"MongoDB Shell"},"driver":{"name":"MongoDB Internal Client","version":"5.0.7"},"os":{"type":"Linux","name":"Ubuntu","architecture":"x86_64","version":"20.04"}}}}                                                                                                  
mongodb  | Start #################################################################                                                                                                                                                            
mongodb  | Successfully added user: {                                                                                                                                                                                                         
mongodb  |      "user" : "root",                                                                                                                                                                                                              
mongodb  |      "roles" : [                                                                                                                                                                                                                   
mongodb  |              {                                                                                                                                                                                                                     
mongodb  |                      "role" : "root",                                                                                                                                                                                              
mongodb  |                      "db" : "admin"                                                                                                                                                                                                
mongodb  |              }                                                                                                                                                                                                                     
mongodb  |      ]                                                                                                                                                                                                                             
mongodb  | }                                                                                                                                                                                                                                  
mongodb  | Successfully added user: {                                                                                                                                                                                                         
mongodb  |      "user" : "catalog",                                                                                                                                                                                                           
mongodb  |      "roles" : [                                                                                                                                                                                                                   
mongodb  |              {                                                                                                                                                                                                                     
mongodb  |                      "role" : "readWrite",                                                                                                                                                                                         
mongodb  |                      "db" : "Catalog"                                                                                                                                                                                              
mongodb  |              }                                                                                                                                                                                                                     
mongodb  |      ]                                                                                                                                                                                                                             
mongodb  | }                                                                                                                                                                                                                                  
mongodb  | END #################################################################                                                                                                                                                              
mongodb  | {"t":{"$date":"2022-04-23T16:30:56.387+00:00"},"s":"I",  "c":"NETWORK",  "id":22944,   "ctx":"conn3","msg":"Connection ended","attr":{"remote":"127.0.0.1:36968","uuid":"c674ed15-4b57-4c65-9da9-a7a4767c7f70","connectionId":3,"connectionCount":0}}        

When connecting through C#

    var settings = new MongoClientSettings
    {
        Credential = MongoCredential.CreateCredential("Catalog", "catalog", "test123test")
    };
    var mongoClient = new MongoClient(settings);
    var database = mongoClient.GetDatabase("Catalog");
    _dbCollection = database.GetCollection<Item>("items");

There is an exception

MongoDB.Driver.MongoAuthenticationException: Unable to authenticate using sasl protocol mechanism SCRAM-SHA-1.
 ---> MongoDB.Driver.MongoCommandException: Command saslStart failed: Authentication failed..
   at MongoDB.Driver.Core.WireProtocol.CommandUsingQueryMessageWireProtocol`1.ProcessReply(ConnectionId connectionId, ReplyMessage`1 reply)

Note: If I remove Environment and initd, I'm able to bash into mongo and manually add users to the admin database. Then, I'm able to log in as root and read/write using c# application on the Catalog db as catalog user. My main goal here is docker-compose automation including users and eventually, seeded data.



Sources

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

Source: Stack Overflow

Solution Source