Wenn Sie sich Folgendes ansehen:
Sie werden feststellen, dass zwei Variablen verwendet werden docker-entrypoint.sh
:
- MONGO_INITDB_ROOT_USERNAME
- MONGO_INITDB_ROOT_PASSWORD
Sie können sie verwenden, um den Root-Benutzer einzurichten. Zum Beispiel können Sie folgende docker-compose.yml
Datei verwenden:
mongo-container:
image: mongo:3.4.2
environment:
# provide your credentials here
- MONGO_INITDB_ROOT_USERNAME=root
- MONGO_INITDB_ROOT_PASSWORD=rootPassXXX
ports:
- "27017:27017"
volumes:
# if you wish to setup additional user accounts specific per DB or with different roles you can use following entry point
- "$PWD/mongo-entrypoint/:/docker-entrypoint-initdb.d/"
# no --auth is needed here as presence of username and password add this option automatically
command: mongod
Wenn Sie nun den Container starten docker-compose up
, sollten Sie folgende Einträge beachten:
...
I CONTROL [initandlisten] options: { net: { bindIp: "127.0.0.1" }, processManagement: { fork: true }, security: { authorization: "enabled" }, systemLog: { destination: "file", path: "/proc/1/fd/1" } }
...
I ACCESS [conn1] note: no users configured in admin.system.users, allowing localhost access
...
Successfully added user: {
"user" : "root",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
Um benutzerdefinierte Benutzer neben root hinzuzufügen, verwenden Sie das exectuable-Skript für den Einstiegspunkt (platziert unter $ PWD / mongo-entrypoint dir, wenn es docker-compose
am Einstiegspunkt bereitgestellt wird):
#!/usr/bin/env bash
echo "Creating mongo users..."
mongo admin --host localhost -u USER_PREVIOUSLY_DEFINED -p PASS_YOU_PREVIOUSLY_DEFINED --eval "db.createUser({user: 'ANOTHER_USER', pwd: 'PASS', roles: [{role: 'readWrite', db: 'xxx'}]}); db.createUser({user: 'admin', pwd: 'PASS', roles: [{role: 'userAdminAnyDatabase', db: 'admin'}]});"
echo "Mongo users created."
Das Einstiegspunktskript wird ausgeführt und zusätzliche Benutzer werden erstellt.
--authenticationDatabase
, um dem Server mitzuteilen, wo nach dem Benutzer gesucht werden soll, bei dem Sie sich authentifizieren. Sie können überprüfen , ob die Authentifizierung auf 2 Arten funktioniert: - Verbinden von Shell mitmongo DB --host -u USER -p PASS --authenticationDatabase DB
- oder über die Local Host - Modus verbinden:mongo --host localhost
und dannuse YOUR_DB
gefolgt vondb.auth("USER","PASS")
docker-compose
. Wenn da nichts Wichtiges drin ist, kannst du es immerdocker-compose rm -fv <servicename>
wieder versuchen ... Immer noch kein Glück? Wenn Sie ein freigegebenes Volume bereitgestellt haben, um die Daten zu erhalten, müssen Sie dieses leeren. github.com/docker-library/mongo/issues/…ein. Sie können Umgebungsvariablen über das Terminal verwenden:
Wenn Sie testen möchten, ob alles funktioniert:
// ssh into the running container // Change container name if necessary $ docker exec -it mongo /bin/bash // Enter into mongo shell $ mongo // Caret will change when you enter successfully // Switch to admin database $> use admin $> db.auth("admin", passwordPrompt()) // Show available databases $> show dbs
Wenn Sie eine Datenbank beim ersten Ausführen instanziieren möchten, aktivieren Sie die Option b.
b. Sie können Umgebungsvariablen in Ihrer Docker-Stack-Bereitstellungsdatei verwenden oder eine Datei für die Versionen 3.4 bis 4.1 erstellen.
Da es auf dem Schnellreferenzteil des erläutert offiziellen Mongo Bildsatzes
MONGO_INITDB_ROOT_USERNAME
undMONGO_INITDB_ROOT_PASSWORD
in Ihrer YAML - Datei:mongo: image: mongo environment: MONGO_INITDB_ROOT_USERNAME: admin MONGO_INITDB_ROOT_PASSWORD: password
Die Datei docker-entrypoint.sh im Mongo-Image prüft, ob diese beiden Variablen vorhanden sind, und setzt das
--auth
Flag entsprechend.c. Sie können auch Docker-Geheimnisse verwenden.
MONGO_INITDB_ROOT_USERNAME
undMONGO_INITDB_ROOT_PASSWORD
wird indirekt von docker-entrypoint.sh vonMONGO_INITDB_ROOT_USERNAME_FILE
undMONGO_INITDB_ROOT_PASSWORD_FILE
Variablen festgelegt:mongo: image: mongo environment: - MONGO_INITDB_ROOT_USERNAME_FILE=/run/secrets/db_root_username - MONGO_INITDB_ROOT_PASSWORD_FILE=/run/secrets/db_root_password secrets: - db_root_username - db_root_password
docker-entrypoint.sh konvertiert
MONGO_INITDB_ROOT_USERNAME_FILE
undMONGO_INITDB_ROOT_PASSWORD_FILE
nachMONGO_INITDB_ROOT_USERNAME
undMONGO_INITDB_ROOT_PASSWORD
.Sie können
MONGO_INITDB_ROOT_USERNAME
undMONGO_INITDB_ROOT_PASSWORD
in Ihrem.sh
oder.js
Skripten imdocker-entrypoint-initdb.d
Ordner verwenden, während Sie die Datenbankinstanz initialisieren.Wenn ein Behälter zum ersten Mal gestartet wird es Dateien mit den Erweiterungen ausgeführt wird
.sh
und.js
dass gefunden werden/docker-entrypoint-initdb.d
. Dateien werden in alphabetischer Reihenfolge ausgeführt..js
Dateien werden von Mongo unter Verwendung der von derMONGO_INITDB_DATABASE
Variablen angegebenen Datenbank ausgeführt , sofern vorhanden, oder auf andere Weise getestet. Sie können auch die Datenbank innerhalb des.js
Skripts wechseln .Diese letzte Methode befindet sich nicht in den Referenzdokumenten, sodass sie ein Update möglicherweise nicht überlebt.
quelle
mongo ip:port
Hier ist, was ich für das gleiche Problem getan habe, und es hat funktioniert.
Führen Sie die Mongo Docker-Instanz auf Ihrem Server aus
docker run -d -p 27017:27017 -v ~/dataMongo:/data/db mongo
Öffnen Sie die Bash auf der laufenden Docker-Instanz.
Referenz- https://github.com/arunoda/meteor-up-legacy/wiki/Accessing-the-running-Mongodb-docker-container-from-command-line-on-EC2
Betreten Sie die Mongo-Shell, indem Sie Mongo eingeben.
In diesem Beispiel werde ich einen Benutzer namens ian einrichten und diesem Benutzer Lese- und Schreibzugriff auf die Datenbank cool_db gewähren.
> use cool_db > db.createUser({ user: 'ian', pwd: 'secretPassword', roles: [{ role: 'readWrite', db:'cool_db'}] })
Referenz: https://ianlondon.github.io/blog/mongodb-auth/ (nur erster Punkt)
Verlassen Sie die Mongod-Muschel und schlagen Sie.
Stoppen Sie die Docker-Instanz mit dem folgenden Befehl.
Führen Sie nun den Mongo Docker mit aktivierter Authentifizierung aus.
docker run -d -p 27017:27017 -v ~/dataMongo:/data/db mongo mongod --auth
Referenz: Wie aktiviere ich die Authentifizierung in MongoDB über Docker? (Usman Ismails Antwort auf diese Frage)
Mit dem folgenden Befehl konnte ich von meinem lokalen Windows-Laptop aus eine Verbindung zu der auf einem Google Cloud-Server ausgeführten Instanz herstellen.
mongo <ip>:27017/cool_db -u ian -p secretPassword
Referenz: Wie kann ich vom Mac OS-Terminal aus eine Verbindung zu einem Remote-Mongo-Server herstellen?
quelle
docker run -d -p 27017:27017 -v ~/dataMongo:/data/db mongo
startet dieser Befehl ungesicherte Mongo DB? Welche helfen uns, erste Befehle hinzuzufügen.run
, dass Sie bereits einen Container für MongoDB haben? Sie müssen den Container beenden, mit dem Sie auth einrichten können, und ihn dann mit auth erneut ausführen? Ich verstehe es nicht-v ~/dataMonogo/data/db
, was ich nicht bekomme, ich kenne mich nicht mit Devops / Hosting ausEs fällt mir schwer, es zu versuchen
Also habe ich 2020 hier antworten lassen
Mein Verzeichnis sieht so aus
Mein
docker-compose.yml
sieht so ausversion: '3.4' services: mongo-container: # If you need to connect to your db from outside this container network_mode: host image: mongo:4.2 environment: - MONGO_INITDB_ROOT_USERNAME=admin - MONGO_INITDB_ROOT_PASSWORD=pass ports: - "27017:27017" volumes: - "$PWD/mongo-entrypoint/:/docker-entrypoint-initdb.d/" command: mongod
Bitte ändern Sie
admin
undpass
mit Ihrem Bedarf.Im Inneren habe
mongo-entrypoint
ichentrypoint.js
Datei mit diesem Inhalt:var db = connect("mongodb://admin:pass@localhost:27017/admin"); db = db.getSiblingDB('new_db'); // we can not use "use" statement here to switch db db.createUser( { user: "user", pwd: "pass", roles: [ { role: "readWrite", db: "new_db"} ], passwordDigestor: "server", } )
Auch hier müssen Sie
admin:pass
Ihre Root-Mongo-Anmeldeinformationen in Ihrendocker-compose.yml
zuvor angegebenen ändern . In weiteren müssen Sie ändernnew_db
,user
,pass
zu Ihrem neuen Datenbanknamen und Anmeldeinformationen , die Sie benötigen.Jetzt kannst du:
Und stellen Sie von localhost aus eine Verbindung zu dieser Datenbank her. Bitte beachten Sie, dass ich bereits mongo cli habe. Sie können es installieren oder im obigen Container ausführen, um den folgenden
mongo
Befehl zu verwenden :Oder Sie können eine Verbindung von einem anderen Computer aus herstellen
mongo host:27017/new_db -u user -p pass
Mein Git-Repository: https://github.com/sexydevops/docker-compose-mongo
Hoffe es kann jemandem helfen, ich habe meinen Nachmittag dafür verloren;)
quelle
$PWD
sie durch.
Hinweis ersetzt werden musste. Der Administrator-Benutzername muss sich von dem Benutzernamen unterscheiden, den Sie für die neue Datenbank erstellen möchtendb = new Mongo().getDB("myDatabase");
ÜbrigensDas Dockerfile für das offizielle Mongo-Bild ist hier . Der Standardbefehl ist mongod, aber Sie können ihn überschreiben, um den Schalter --auth hinzuzufügen, vorausgesetzt, die Benutzer sind bereits konfiguriert.
Wenn der Benutzer erstellt werden muss, müssen Sie ein Startskript in ein Volume einbinden
/entrypoint.sh
, um das Standardstart- Skript zu ersetzen. Anschließend muss dieses Skript Benutzer erstellen und mongo mit dem Auth-Schalter starten.quelle
Das Ablegen einer .js-Datei in den Einstiegspunkt-Init-Ordner funktioniert hierfür
zB entrypoint.js
var db = connect("mongodb://localhost/admin"); db.createUser( { user: "yourAdminUserName", pwd: "yourAdminPassword", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )
docker-compose.yml:
db: image: mongo:3.2 volumes: - /my/own/datadir:/data/db - ../mongo-entrypoint:/docker-entrypoint-initdb.d
Den Rest von Hand oder mehr der gleichen Arbeiten erledigen.
Wenn Sie möchten, können Sie auch eine .sh-Datei in den init-Ordner legen, um die Dateien zu bereinigen, damit sie nicht herumliegen: zz-cleanup.sh.
quelle
Ich möchte einen Kommentar abgeben, habe aber nicht genug Ruf.
Das oben gezeigte ausführbare Skript zum Hinzufügen von Benutzern muss mit --authenticationDatabase admin und NEWDATABASENAME geändert werden .
mongo --authenticationDatabase admin --host localhost -u USER_PREVIOUSLY_DEFINED -p PASS_YOU_PREVIOUSLY_DEFINED NEWDATABASENAME --eval "db.createUser({user: 'NEWUSERNAME', pwd: 'PASSWORD', roles: [{role: 'readWrite', db: 'NEWDATABASENAME'}]});"
https://i.stack.imgur.com/MdyXo.png
quelle
/docker-entrypoint-initdb.d
. Der Standardwert isttest
.@jbochniak: Danke, obwohl ich beim ersten Lesen dachte, ich hätte das alles bereits entdeckt, stellte sich heraus, dass Ihr Beispiel (insbesondere die Version des Mongo Docker-Bildes) mir geholfen hat!
Diese Version (v3.4.2) und die Version 3.4 (die derzeit v3.4.3 entspricht) unterstützen weiterhin 'MONGO_INITDB_ROOT', die über diese Variablen angegeben wurden, ab Version 3.5 (mindestens Tags '3' und 'neueste') NICHT Arbeiten Sie wie in Ihrer Antwort und in den Dokumenten beschrieben.
Ich habe mir schnell den Code auf GitHub angesehen, aber eine ähnliche Verwendung dieser Variablen festgestellt und konnte den Fehler nicht sofort finden. Sollte dies tun, bevor ich ihn als Fehler einreiche ...
quelle
3.5
und es hat sie jetzt auch: github.com/docker-library/mongo/blob/master/3.5/…Verwenden Sie diese Bilder, um Folgendes zu beheben:
Mit docker-compose.yml
services: db: image: aashreys/mongo-auth:latest environment: - AUTH=yes - MONGODB_ADMIN_USER=admin - MONGODB_ADMIN_PASS=admin123 - MONGODB_APPLICATION_DATABASE=sample - MONGODB_APPLICATION_USER=aashrey - MONGODB_APPLICATION_PASS=admin123 ports: - "27017:27017" // more configuration
quelle
Sie können env-Variablen verwenden, um Benutzername und Passwort für Mongo einzurichten
mit einfachen Docker-Befehl
mit Docker-Compose
version: '3.1' services: mongo: image: mongo restart: always environment: MONGO_INITDB_ROOT_USERNAME: my-user MONGO_INITDB_ROOT_PASSWORD: my-password
und die letzte Option besteht darin, manuell auf den Container zuzugreifen und den Benutzer und das Kennwort im Mongo Docker-Container festzulegen
Jetzt können Sie mit dem Befehl mongo shell alles konfigurieren, was Sie wollen
quelle