Erstellen Sie einen neuen Benutzer für MongoDB in Docker

8

Ich verwende das Standard-MongoDB Docker-Image und versuche, einen neuen Benutzer für die Datenbank zu erstellen.

Ich versuche es gerade so:

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 

Und die create_ddbb.js:

db.createUser(
    {
      user: "*******",
      pwd: "*******************",
      roles: [
         { role: "readWrite", db: "foobar" }
      ]
    }
);

Und wenn ich das Dockerfile erstelle, sehe ich:

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

Der Benutzer wird also erstellt, aber wenn ich versuche, eine Verbindung herzustellen, wird Folgendes angezeigt:

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)

Warum passiert das? Wie kann ich den erstellten Benutzer beibehalten?

alexandernst
quelle

Antworten:

5

Meine Lösung:

In Ihrem 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

Innerhalb der create_ddbb.js:

db.createUser(
    {
      user: "your_user",
      pwd: "********************",
      roles: [
         { role: "dbOwner", db: "your_database" }
      ]
    }
,
    {
        w: "majority",
        wtimeout: 5000
    }
);
db.createCollection("test");

Das createColleciton("test")am Ende ist extrem wichtig. Ohne das wird das createUsernicht angewendet. Ich weiß nicht genau warum, sorry.

alexandernst
quelle
1
Wir haben die erste Bearbeitung redigiert. Sie sollten Ihr Passwort trotzdem ändern.
Sven
Was ist in der mongo.confDatei?
Ascalonian
@Ascalonian Dies ist die Standarddatei mongo.conf, die Sie von Docker erhalten FROM docker.io/mongo:3.2
alexandernst
@alexandernst - Danke! Ich benutze nur, mongo:latestalso war ich mir nicht sicher.
Ascalonian
1

Der Benutzer sollte folgendermaßen in die Admin-Datenbank aufgenommen werden: RUN mongod --fork --logpath /var/log/mongodb.log \ && sleep 5 && mongo foobar /tmp/create_ddbb.js

Simon
quelle
Meinst du mongo admin /tmp/create_ddbb.js? Wenn ja, habe ich das versucht und es funktioniert immer noch nicht (gleiche Ausgabe).
Alexander