2016-01-10 9 views
6

Sono nuovo alla finestra mobile. Sto cercando di creare un contenitore MongoDB e un contenitore NodeJS. Il mio file assomiglia a this.Immagine dock mongo 'Connessione rifiutata' da un altro contenitore

Dovrebbe essere in esecuzione npm install e quindi node .. Ma docker-compose up termina con [MongoError: connect ECONNREFUSED 127.0.0.1:27017] mentre il comando node .. Penso che questo sia dovuto allo bind_ip = 127.0.0.1 nel file /etc/mongod.conf. È giusto?

Io uso boot2docker su un sistema Win10.

Come posso risolvere questo problema in modo che il nodo possa connettersi a MongoDB?

risposta

24

Nel backend app, connettersi a mongodb:27017 invece di 127.0.0.1:27017. Dove 'mongodb' è il nome del tuo contenitore all'interno di docker-compose.yml.

+0

Ah ok ho capito. Invece dell'IP utilizziamo il nome del link all'interno di un container. Grazie! – Piu130

+2

Per chiarimenti per altre persone che hanno il problema. Nell'app del tuo nodo: '' 'mongoose.connect ('mongodb: // db: 27017/qualunque');' '' Dove 'db' è il nome del tuo contenitore all'interno di docker-compose.yml - cioè '' 'depends_on : - db db: image: mongodb''' – colbyJax

+0

@colby jax Sto usando mongoose.connect() come hai menzionato. Ma sto ricevendo un errore quando uso docker-compose up – N15

4

Molto probabilmente sì. 127.0.0.1 punta a localhost all'interno di il contenitore mongodb, quindi non è accessibile dall'esterno del contenitore. Il binding a 0.0.0.0 probabilmente funzionerà.

Con il link specificato nella finestra mobile-compose.yml, contenitore backend dovrebbe quindi essere in grado di connettersi al contenitore mongo attraverso mongodb:27017

2

Devi dire al contenitore di utilizzare il proprio indirizzo IP invece di localhost.

Per esempio, ti permette di assumere il codice patibolo generato con expressjs, si deve scrivere in routes/index.js

var mongodb = require('mongodb'); 
router.get('/thelist', function(req, res){ 

    // Get a Mongo client to work with the Mongo server 
    var MongoClient = mongodb.MongoClient; 

    // Define where the MongoDB server is 
    var url = 'mongodb://172.17.0.5:27017/dbname'; 

    // Connect to the server 
    MongoClient.connect(url, function (err, db) { 
    ......... 

dove 172.17.0.5 è il $CONTAINER_IP

è possibile trovare l'ip contenitore tramite $ docker inspect $CONTAINER_HOSTNAME | grep IPAddress

Se ancora non riesci a capire, puoi dare un'occhiata al mio Docker NodeJS and MongoDB app

3

Recentemente ho riscontrato un problema simile. Sto eseguendo il docker toolbox sotto win 10 e questo è il modo in cui ha funzionato per me:

1) Ho dovuto verificare quale URL viene utilizzata dalla mia finestra mobile predefinita. Questo può essere controllato eseguendo il comando docker-machine ls. Esso elencherà macchine disponibili:

NAME    ACTIVE DRIVER  STATE  URL       SWARM DOCKER  ERRORS 
default   *  virtualbox Running tcp://192.168.99.100:1234   v17.06.0-ce 
rancher-client -  virtualbox Stopped          Unknown 
rancher-server -  virtualbox Stopped          Unknown 

2) Quando l'immagine MongoDB esecuzione specificare la mappatura delle porte

docker run -d -it -p 27017:27017 mongo 

3) A quel punto il mongo URL valido potrebbe essere simile a questa

var dbhost = 'mongodb://192.168.99.100:27017/test 

dove 192.168.99.100 era l'URL del computer predefinito dal punto 1)

Spero che aiuti qualcuno.

+0

Non ho il comando 'docker-machine' disponibile, ma sono riuscito a controllare l'indirizzo della mia immagine di mongo usando' docker inspect mongo', dove mongo è il nome di l'istanza – Ramses

+0

@Marcin Ho creato un'immagine (esempio di applicazione nodejs) quando provo a eseguire quell'applicazione con il mio localdb. Sto seguendo l'errore. Ho seguito i tuoi passi .. finestra mobile run -d -it -p 27017: 27017 mongo è per l'esecuzione di mongodb Sto eseguendo l'applicazione nodejs da finestra mobile run -d -p 8088: 8088 nitikishu/samplenodejs ora voglio collegare mongodb con la mia applicazione quale comando devo eseguire Nella mia finestra mobile indirizzo IP 192.168.99.100:8088 la mia applicazione è in esecuzione ma mongodb non funziona in localhost: 27017 questo messaggio viene visualizzato. – Vinoth

+0

e Sembra che tu stia cercando di accedere a MongoDB su HTTP sulla porta del driver nativo. Ora cosa dovrei fare? usando quale host e comando per connettere il mongodb con l'applicazione – Vinoth

Problemi correlati