Node.js应用程序无法使用Kubernetes连接到MongoDB Docker容器

时间:2018-07-19 23:24:58

标签: mongodb docker kubernetes

我在多容器Kubernetes吊舱中遇到ENOTFOUND错误。 MongoDB在一个Docker容器中,并且似乎可以完全运行,而Node.js应用程序在另一个容器中(请参见下面的错误)。

/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)

在应用程序容器中,我可以执行以下操作,因此似乎知道MongoDB在端口27017上可用。

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

该应用程序旨在在MongoDB中创建数据库,并填充集合。使用docker-compose.yml文件,这组相同的Docker容器可以与Docker正常工作。这些容器是旧版应用程序的一部分(同一吊舱中还有其他容器),我对其内容没有太多控制权。

我检查了各种容器的日志。用“ kubectl get pods”检查了所有库存豆荚,并且一切正常。对CNI使用“法兰绒”,因此请使用以下内容初始化Kubernetes。

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

1 个答案:

答案 0 :(得分:2)

根据错误输出,您的NodeJS应用程序尝试通过mongodb:27017连接到MongoDB数据库。

由于NodeJS应用程序和MongoDB数据库都是同一个容器的容器,因此,NodeJS应用程序应通过localhost:27017连接到MongoDB数据库,因为容器中的容器共享存储/网络资源。

因此,您需要更改NodeJS应用程序的配置:将连接设置为MongoDB localhost:27017而不是mongodb:27017