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