Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MongoDB on with Docker "failed to connect to server [localhost:27017] on first connect "

Tags:

I am using mongoDB with and NodeJS backend. The Problem is I am getting the following error

node:16) UnhandledPromiseRejectionWarning: MongoNetworkError: failed to connect to server [localhost:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017]

This is my docker-compose

version: '3.4'  services:   db:     image: mongo:latest     ports:       - '27017:27017'    rest-api-node:     build: .     ports:       - '5000:5000'     links:       - db     restart: on-failure 

I have tried with depends_on as well , was not working.

On backend I am mongoose as a middleware to communicate with DB. this is the part of my index.js

mongoose.Promise = global.Promise mongoose.connect('mongodb://localhost/demo') app.listen(port, () => console.log("live")) 

I have tried using promise as well , no change though. Please Help me out. Thanks in advance

complete error log

at Pool. (/app/node_modules/mongodb-core/lib/topologies/server.js:505:11) rest-api-node_1 | at Pool.emit (events.js:180:13) rest-api-node_1 | at Connection. (/app/node_modules/mongodb-core/lib/connection/pool.js:329:12) rest-api-node_1 | at Object.onceWrapper (events.js:272:13) rest-api-node_1 | at Connection.emit (events.js:180:13) rest-api-node_1 | at Socket. (/app/node_modules/mongodb-core/lib/connection/connection.js:245:50) rest-api-node_1 | at Object.onceWrapper (events.js:272:13) rest-api-node_1 | at Socket.emit (events.js:180:13) rest-api-node_1 | at emitErrorNT (internal/streams/destroy.js:64:8) rest-api-node_1 | at process._tickCallback (internal/process/next_tick.js:178:19) rest-api-node_1 | name: 'MongoNetworkError', rest-api-node_1 |
message: 'failed to connect to server [localhost:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017]' }

like image 513
itsMe Avatar asked Jun 24 '18 15:06

itsMe


1 Answers

By default Compose sets up a single network for your app. Each container for a service joins the default network and is both reachable by other containers on that network, and discoverable by them at a hostname identical to the container name.

According to your docker-compose.yaml file you can access you mongo container on 127.0.0.1:27017 only from host machine. In order to access it from NodeJS backend container you should use db:27017.

like image 59
nickgryg Avatar answered Sep 21 '22 12:09

nickgryg