首页 文章

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

提问于
浏览
0

我在多容器Kubernetes pod中遇到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 回答

  • 1

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

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

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

相关问题