![](/img/trans.png)
[英]Kubernetes node.js container cannot connect to MongoDB Atlas
[英]Node.js application fails to connect to MongoDB Docker container using 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
根據錯誤輸出,您的NodeJS應用程序嘗試通過mongodb:27017
連接到MongoDB數據庫。
由於NodeJS應用程序和MongoDB數據庫都是同一Pod的容器,因此NodeJS應用程序應通過localhost:27017
連接到MongoDB數據庫,因為Pod中的容器共享存儲/網絡資源。
因此,您需要更改NodeJS應用程序的配置:將連接設置為MongoDB localhost:27017
而不是mongodb:27017
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.