Node.js application fails to connect to MongoDB Docker container using Kubernetes

7/19/2018

I am encountering an ENOTFOUND error within a multi-container Kubernetes pod. MongoDB is in one Docker container and appears to be fully operational, and a Node.js application is in another container (see its error below).

/opt/systran/apps-node/enterprise-server/node_modules/mongoose/node_modules/mongodb/lib/replset.js:365 process.nextTick(function() { throw err; }) ^ MongoError: failed to connect to server [mongodb:27017] on first connect [MongoError: getaddrinfo ENOTFOUND mongodb mongodb:27017] at Pool. (/opt/systran/apps-node/enterprise-server/node_modules/mongodb-core/lib/topologies/server.js:336:35) at emitOne (events.js:116:13) at Pool.emit (events.js:211:7) at Connection. (/opt/systran/apps-node/enterprise-server/node_modules/mongodb-core/lib/connection/pool.js:280:12) at Object.onceWrapper (events.js:317:30) at emitTwo (events.js:126:13) at Connection.emit (events.js:214:7) at Socket. (/opt/systran/apps-node/enterprise-server/node_modules/mongodb-core/lib/connection/connection.js:189:49) at Object.onceWrapper (events.js:315:30) at emitOne (events.js:116:13) at Socket.emit (events.js:211:7) at emitErrorNT (internal/streams/destroy.js:64:8) at _combinedTickCallback (internal/process/next_tick.js:138:11) at process._tickCallback (internal/process/next_tick.js:180:9)

In the application container I can do the following, so it seems to know that MongoDB is available on port 27017.

curl "http://localhost:27017" It looks like you are trying to access MongoDB over HTTP on the native driver port.

The application is intended to create databases in MongoDB, and populate collections. This same set of Docker containers work fine with Docker using a docker-compose.yml file. The containers are part of a legacy application (there are other containers in the same pod), and I don't have much control over their content.

I have checked logs for the various containers. Have reviewed all stock pods with "kubectl get pods" and all are working fine. Using "flannel" for CNI, so use the following to initialize Kubernetes.

kubeadm init --pod-network-cidr=10.244.0.0/16

-- djsys
docker
kubernetes
mongodb

1 Answer

7/20/2018

According to the error output, your NodeJS application tries to connect to MongoDB database via mongodb:27017.

As both NodeJS application and MongoDB database are containers of the same pod, NodeJS application should be connected to MongoDB database via localhost:27017 instead, because containers in a pod share storage/network resources.

So, you need to change NodeJS application's configuration: set connection to MongoDB localhost:27017 instead of mongodb:27017.

-- nickgryg
Source: StackOverflow