2015-10-26 13 views
9

Io corro Docker su OS X con:Collegamento a mongo contenitore finestra mobile da host

docker run --name mongo -p 27017:27017 -v ./data/db:/data/db -d mongo mongod 

e utilizzando l'IP che ricevo da:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' <cid> 

in:

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(); 
}); 

e ricevo un errore di timeout.

Sto utilizzando il repository mongo ufficiale da Docker Hub. C'è qualche installazione aggiuntiva che devo fare per connettermi dall'host?

risposta

20

Il codice node.js viene eseguito da un contenitore o dall'host?

Se è il padrone di casa, basta usare l'indirizzo cioè localhost:

var url = 'mongodb://localhost:27017'; 

Ciò funzionerà perché hai pubblicato il porto con -p 27017:27017.

Se il codice viene eseguito all'interno di un contenitore, sarebbe meglio di riscrivere in modo da utilizzare i collegamenti e facendo riferimento al contenitore Mongo per nome es:

var url = 'mongodb://mongo:27017'; 

Poi, quando si avvia il contenitore con il nodo. codice js, si può semplicemente fare qualcosa di simile:

docker run -d --link mongo:mongo my_container 

Docker sarà poi aggiungere una voce al /etc/hosts all'interno del contenitore in modo che il nome mongo risolve al IP del contenitore mongo.

+0

Sono in esecuzione dall'host. Ricevo una connessione rifiutata quando la cambio su localhost. – ggeise

+0

Sei sicuro che il container mongo sia ancora in esecuzione? Dai un'occhiata in 'docker ps'. Ho appena provato e si blocca immediatamente con un errore del journal per me - ho dovuto passare l'argomento '--smallfiles' per farlo iniziare. –

+0

Sì, è tutto per me. Ho provato a mettere il mio programma in un contenitore e si sta connettendo bene con la sintassi del collegamento. – ggeise

0

Se si utilizza una rete definita dall'utente si dovrebbe essere in grado di prenderlo in carico senza collegamento o specificare 27017

const MONGO_NAME_STR = "mongodb://" + "your_docker_container_name"; 
var db = {}; 

mongo_client.connect(MONGO_NAME_STR, function(err, _db){ 
    //some err handling 
    db = _db; 
}); 
Problemi correlati