Erreur mongod du conteneur Docker lors du démarrage via ssh

J’ai installé mongodb sur un conteneur Docker avec openssh sur Ubuntu 14.04. Le conteneur s’exécute avec ssh mais quand je ssh dans le conteneur, j’obtiens l’erreur suivante lorsque j’essaie de démarrer mongod.

root@430f9502ba2d:~# service mongod start Rather than invoking init scripts through /etc/init.d, use the service(8) utility, eg service mongod start Since the script you are attempting to invoke has been converted to an Upstart job, you may also use the start(8) utility, eg start mongod 

start mongod également start mongod n’affecte rien.

Essayé de regarder ce démon aussi Mongo ne fonctionne pas par service mongod start sans aide.

mongod --config /your/path/to/mongod.conf ne semble pas fonctionner aussi, il suffit de verrouiller.

L’erreur ci-dessous est standard car, bien sûr, il n’y a pas de serveur mongod.

 root@430f9502ba2d:/# mongo MongoDB shell version: 2.6.9 connecting to: test 2015-05-07T20:49:56.213+0000 warning: Failed to connect to 127.0.0.1:27017, reason: errno:111 Connection refused 2015-05-07T20:49:56.214+0000 Error: couldn't connect to server 127.0.0.1:27017 (127.0.0.1), connection attempt failed at src/mongo/shell/mongo.js:146 exception: connect failed 

Le problème ici est votre approche. Docker n’a pas de système d’initialisation comme celui auquel vous êtes habitué sur les systèmes traditionnels. Ce que docker fait, c’est remplacer le PID 1 par le processus que vous spécifiez dans les commandes CMD ou ENTRYPOINT Dockerfile. Pour l’instant, ignorez ENTRYPOINT , car il remplace ce que votre CMD est exécuté (normalement, c’est /bin/sh -c ). Vous devez indiquer à docker de démarrer votre service mongod dans votre fichier Dockerfile avec la commande CMD , par exemple:

CMD usr/bin/mongod

Et quand vous exécuterez votre conteneur, mongod sera votre PID 1. Maintenant, vous vous demandez probablement “Mais qu’en est-il de mon serveur SSH?” La réponse est la suivante: N’exécutez pas de serveur SSH sur vos conteneurs Docker. Il y a quelques cas d’utilisation où l’exécution d’un serveur SSH est acceptable, mais presque toutes les raisons “normales” (débogage, C & C, etc.) sont annulées avec la “meilleure pratique” pour obtenir un shell sur votre conteneur:

docker exec -it myContainer /bin/bash

Cela vous déposera dans un shell sur votre conteneur en cours d’exécution. La recommandation ici pour gérer la configuration et les modifications dans votre conteneur Docker consiste à utiliser quelque chose comme Ansible. Cependant, rappelez-vous que les conteneurs docker sont éphémères et que vous ne devez pas redémarrer les services et modifier leur état de configuration. Si vous avez besoin d’un changement de configuration, modifiez le fichier Dockerfile ou les données de configuration, puis démarrez un nouveau conteneur. Bonne chance! Voici un peu plus d’informations sur Dockerizing MongoDB, mais gardez à l’esprit que la méthode décrite modifie ENTRYPOINT dans le Dockerfile, qui est un peu plus complexe et nécessite une meilleure compréhension de ce qui se passe dans Dockerfiles.

Ceci est vraiment utile. J’essayais de faire fonctionner les anciens playbooks Ansible avec Docker en créant plusieurs conteneurs vides et laisser Ansible faire le rest.

Il fonctionne via la commande mongod --dbpath /var/lib/mongodb --smallfiles