La connexion à mongo conteneur docker à partir de l'hôte
Je suis à court de Docker sur OS X avec:
docker run --name mongo -p 27017:27017 -v ./data/db:/data/db -d mongo mongod
et à l'aide de l'adresse ip, je reçois à partir de:
docker inspect --format '{{ .NetworkSettings.IPAddress }}' <cid>
:
var MongoClient = require('mongodb').MongoClient;
var assert = require('assert');
var url = 'mongodb://<ip>:27017';
MongoClient.connect(url, function(err, db) {
assert.equal(null, err);
db.close();
});
et je suis arriver a expiré erreur.
Je suis en utilisant le officiel mongo référentiel de Docker Hub. Est-il un paramétrage supplémentaire que je dois faire afin de vous connecter à partir de l'hôte?
OriginalL'auteur ggeise | 2015-10-26
Vous devez vous connecter pour publier un commentaire.
Est l'node.js code exécuté à partir d'un conteneur ou de l'hôte?
Si c'est sur l'accueil, il suffit d'utiliser l'adresse localhost j'.e:
Cela fonctionne parce que vous avez publié le port avec
-p 27017:27017
.Si le code est exécuté à l'intérieur d'un conteneur, il serait préférable de le réécrire les liens et se référant à l'mongo conteneur par nom.g:
Ensuite, lorsque vous lancez le récipient avec de l'Node.js code, vous pouvez simplement faire quelque chose comme:
Docker va alors ajouter une entrée à
/etc/hosts
à l'intérieur du récipient, de sorte que le nommongo
résout l'adresse IP de l'mongo conteneur.Êtes-vous sûr que les mongo conteneur est toujours en cours d'exécution? Jetez un oeil dans
docker ps
. Je viens de tester et il se bloque immédiatement avec un journal d'erreur pour moi - j'ai dû passer le--smallfiles
argument de l'obtenir pour commencer.Yep, c'est de rester pour moi. J'ai essayé de mettre mon programme à l'intérieur d'un conteneur et il se connecte très bien avec le lien de la syntaxe.
Oh, êtes-vous à l'aide de la boot2docker/le Docker boîte à outils? Si oui, vous devez utiliser l'adresse IP de la VM, pas de localhost.
Ah, je l'ai eu! M'a fallu un certain temps à comprendre il y a une différence entre l'IP de la VM et celui du conteneur. Je vous remercie, monsieur!
OriginalL'auteur
Si vous utilisez un définis par l'utilisateur réseau, vous devriez être en mesure de le ramasser sans liant ou en spécifiant 27017
OriginalL'auteur