'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 |
---|