我在多容器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 回答
根据错误输出,您的NodeJS应用程序尝试通过
mongodb:27017
连接到MongoDB数据库 .由于NodeJS应用程序和MongoDB数据库都是同一pod的容器,因此NodeJS应用程序应通过
localhost:27017
连接到MongoDB数据库,因为pod中的容器共享存储/网络资源 .因此,您需要更改NodeJS应用程序的配置:将连接设置为MongoDB
localhost:27017
而不是mongodb:27017
.