Comment créer une DB pour MongoDB conteneur sur démarrer?
Je suis en train de travailler avec le Panneau et j'ai une pile avec PHP, MySQL, Apache et Redis. J'ai besoin d'ajouter MongoDB maintenant si j'ai été vérifier le Dockerfile pour la version la plus récente et aussi l'docker-entrypoint.sh fichier à partir de la MongoDB Dockerhub mais je ne pouvais pas trouver un moyen de l'installation d'un défaut DB utilisateur admin/mot de passe et éventuellement auth méthode pour le conteneur à partir d'un docker-compose.yml
fichier.
Dans MySQL, vous pouvez configurer certaines variables d'environnement comme par exemple:
db:
image: mysql:5.7
env_file: .env
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
Et ce sera d'installation de la base de données et l'utilisateur/mot de passe que le root
mot de passe.
Est-il possible de réaliser la même chose avec MongoDB? Quelqu'un a de l'expérience ou une solution de contournement?
bien sûr, je peux, mais quel est votre point?
Mon point est, que vous pouvez définir une valeur par défaut DB utilisateur admin/mot de passe et éventuellement auth méthode dans dockerfile à l'aide de variables et puis de les transmettre à composer fichier
OriginalL'auteur ReynierPM | 2017-03-20
Vous devez vous connecter pour publier un commentaire.
La officiel
mongo
de l'image a fusionné un PR inclure la fonctionnalité pour créer des utilisateurs et des bases de données au démarrage.La base de données d'initialisation sera exécuté lorsque rien n'est renseigné dans le
/data/db
répertoire.Utilisateur Admin Setup
Les variables d'environnement de contrôle de l'utilisateur "root" de la configuration sont
MONGO_INITDB_ROOT_USERNAME
MONGO_INITDB_ROOT_PASSWORD
Exemple
Vous ne devez pas/ne pouvez pas utiliser
--auth
sur la ligne de commande le panneau entrypoint.sh le script ajoute ce que lorsque les variables d'environnement existent.Autre Coutume D'Initialisation
L'image fournit également la
/docker-entrypoint-initdb.d/
chemin de déployer personnalisé.js
ou.sh
des scripts d'installation qui sera exécuté une fois sur la base de données d'initialisation..js
scripts seront exécutés contretest
par défaut ouMONGO_INITDB_DATABASE
si elle est définie dans l'environnement.ou
Une simple initialisation fichier javascript qui démontre la journalisation et comment sortir avec une erreur (pour le résultat de la vérification).
set -e
est de dire laentrypoint.sh
de lire les variables deENV
définition donc, je peux utiliser la même méthode que l'exemple de MySQL, je suis de droite? Comme un ajout à votre réponse j'ai trouvé PR apparemment, quelqu'un travaille dans quelque chose de similaire à votre proposition vient d'un autre point de vueLes variables d'environnement, vous obtenez par défaut.
set -e
cause l'ensemble du script à la sortie lorsqu'une commande échoue, de sorte que le script ne peut pas échouer en mode silencieux et le démarrage de mongo.Semblable à toutes les Dockerfile construire des scripts, vous voyez que l'utilisation
&&
partout.Que mongo PR est un beaucoup plus approfondi de la mise en œuvre! et le
docker-entrypoint-initdb.d
répertoire rend extensible. J'espère que get fusionnéesIl est fusionné (voir ici)
OriginalL'auteur
Au cas où quelqu'un est à la recherche pour savoir comment configurer MongoDB avec l'authentification à l'aide
docker-compose
, voici un exemple de configuration à l'aide de variables d'environnement:Lors de l'exécution de
docker-compose up
votre mongo instance est exécuté automatiquement avec auth activé. Vous aurez une base de données admin avec le mot de passe donné.mongo --username admin --password password --host localhost --port 27017
je ne suis pas en mesure de se connecter en tant que les journaux montrent les utilisateurs et db est créé avec succès. ERREUR:$ mongo --username admin --password password --host localhost --port 27017 MongoDB shell version v3.4.10 connecting to: mongodb://localhost:27017/ MongoDB server version: 3.6.5 WARNING: shell and server versions do not match 2018-06-07T13:05:09.022+0000 E QUERY [thread1] Error: Authentication failed. : DB.prototype._authOrThrow@src/mongo/shell/db.js:1461:20 @(auth):6:1 @(auth):1:2 exception: login failed
vous devez
mongo admin --username ADMIN --password PASSWORT
pour vous connecter à votre mongo instance.OriginalL'auteur
Voici une solution qui crée
admin-user
utilisateur avec un mot de passe, base de données supplémentaire (test-db
), ettest-user
dans la base de données.Dockerfile:
mongo-init.js:
La partie la plus délicate a été de comprendre que *.js fichiers ont été exécutés non authentifiés.
La solution authentifie le script comme le
admin-user
dans leadmin
base de données.MONGO_INITDB_DATABASE admin
est essentiel, sinon le script sera exécuté à l'encontre de latest
db. Vérifier le code source de docker-entrypoint.sh.OriginalL'auteur
Mongo de l'image peut être affectée par
MONGO_INITDB_DATABASE
variable, mais il ne peut pas créer la base de données. Cette variable détermine la base de données en cours lors de l'exécution de/docker-entrypoint-initdb.d/*
les scripts. Puisque vous ne peut pas utiliser des variables d'environnement dans les scripts exécutés par Mongo, je suis allé avec un shell script:docker-cloud.yml
:init-mongo.sh
:OriginalL'auteur
Ici une autre solution plus propre en utilisant
docker-compose
et unjs
script.Cet exemple suppose que les deux fichiers (menu fixe-composer.yml et mongo-init.js) se trouvent dans le même dossier.
docker-composer.yml
mongo-init.js
Puis il suffit de démarrer le service en exécutant la commande suivante docker-composition de commande
OriginalL'auteur
Si vous êtes à la recherche pour supprimer les noms d'utilisateur et mots de passe à partir de votre panneau-composer.yml, vous pouvez utiliser Docker Secrets, voici comment j'ai approché il.
J'ai utiliser le fichier: option pour mes secrets toutefois, vous pouvez également utiliser externe: et utiliser les secrets dans un essaim.
Les secrets sont disponibles pour n'importe quel script dans le conteneur à /var/run/secrets
Le Panneau de la documentation a ceci à dire à propos de stocker des données sensibles...
https://docs.docker.com/engine/swarm/secrets/
Vous pouvez utiliser les secrets de gérer toutes les données sensibles d'un conteneur besoins au moment de l'exécution, mais vous ne voulez pas stocker dans l'image ou dans la source de contrôle, tels que:
Les noms d'utilisateur et mots de passe
TLS des certificats et des clés
Les clés SSH
D'autres données importantes, telles que le nom d'une base de données ou un serveur interne
Générique de chaînes ou de contenu binaire (jusqu'à 500 ko)
OriginalL'auteur