Create a new user for MongoDB inside Docker
16,727
Solution 1
My solution:
Inside your Dockerfile
:
ADD create_ddbb.js /tmp/
RUN mongod -f /etc/mongod.conf --fork --logpath /var/log/mongodb.log \
&& sleep 5 \
&& mongo <YOUR DATABASE> /tmp/create_ddbb.js
Inside the create_ddbb.js
:
db.createUser(
{
user: "your_user",
pwd: "********************",
roles: [
{ role: "dbOwner", db: "your_database" }
]
}
,
{
w: "majority",
wtimeout: 5000
}
);
db.createCollection("test");
The createColleciton("test")
at the end is extremely important. Without that, the createUser
isn't applied. I don't know why exactly, sorry.
Solution 2
the user should be added in the admin database so like this:
RUN mongod --fork --logpath /var/log/mongodb.log \
&& sleep 5 && mongo foobar /tmp/create_ddbb.js
Related videos on Youtube
Author by
alexandernst
Updated on September 18, 2022Comments
-
alexandernst almost 2 years
I'm using the default MongoDB Docker image and I'm trying to create a new user for the database.
I'm currently trying to do it this way:
FROM docker.io/mongo:3.2 MAINTAINER <alexandernst> [email protected] ADD create_ddbb.js /tmp/ RUN mongod --fork --logpath /var/log/mongodb.log \ && sleep 5 && mongo foobar /tmp/create_ddbb.js
And the
create_ddbb.js
:db.createUser( { user: "*******", pwd: "*******************", roles: [ { role: "readWrite", db: "foobar" } ] } );
And when I build the Dockerfile, I see:
Step 4 : RUN mongod --fork --logpath /var/log/mongodb.log && sleep 5 && mongo foobar /tmp/create_ddbb.js ---> Running in 58ba44d02508 about to fork child process, waiting until server is ready for connections. forked process: 9 child process started successfully, parent exiting MongoDB shell version: 3.2.6 connecting to: foobar Successfully added user: { "user" : "***********", "roles" : [ { "role" : "readWrite", "db" : "foobar" } ] } ---> e73b6c8c8b83 Removing intermediate container 58ba44d02508 Successfully built e73b6c8c8b83
so the user is created, but then when I try to connect, I get:
mongo_1 | 2016-05-13T17:44:02.159+0000 I NETWORK [initandlisten] connection accepted from 172.20.0.4:41294 #1 (1 connection now open) mongo_1 | 2016-05-13T17:44:02.160+0000 I ACCESS [conn1] SCRAM-SHA-1 authentication failed for ********* on foobar from client 172.20.0.4 ; UserNotFound: Could not find user *********@foobar mongo_1 | 2016-05-13T17:44:02.160+0000 I NETWORK [conn1] end connection 172.20.0.4:41294 (0 connections now open)
Why is that happening? How can I persist the created user?
-
alexandernst about 8 yearsDo you mean
mongo admin /tmp/create_ddbb.js
? If so, I tried that and it's still not working (same output). -
FooBee almost 8 yearsWe have redacted the first edit. You should change your password anyway.
-
Ascalonian almost 8 yearsWhat's in the
mongo.conf
file? -
Ascalonian almost 8 years@alexandernst - Thanks! I am just using
mongo:latest
so I wasn't sure.