【发布时间】:2018-07-20 14:28:05
【问题描述】:
我在多容器 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:第一次连接时无法连接到服务器 [mongodb:27017] [MongoError: getaddrinfo ENOTFOUND mongodb mongodb:27017]
在游泳池。 (/opt/systran/apps-node/enterprise-server/node_modules/mongodb-core/lib/topologies/server.js:336:35)
在 emitOne (events.js:116:13)
在 Pool.emit (events.js:211:7)
在连接处。 (/opt/systran/apps-node/enterprise-server/node_modules/mongodb-core/lib/connection/pool.js:280:12)
在 Object.onceWrapper (events.js:317:30)
在 emitTwo (events.js:126:13)
在 Connection.emit (events.js:214:7)
在套接字。 (/opt/systran/apps-node/enterprise-server/node_modules/mongodb-core/lib/connection/connection.js:189:49)
在 Object.onceWrapper (events.js:315:30)
在 emitOne (events.js:116:13)
在 Socket.emit (events.js:211:7)
在 emitErrorNT (internal/streams/destroy.js:64:8)
在 _combinedTickCallback (内部/进程/next_tick.js:138:11)
在 process._tickCallback (internal/process/next_tick.js:180:9)
在应用程序容器中我可以执行以下操作,所以它似乎知道 MongoDB 在端口 27017 上可用。
curl "http://localhost:27017" 看起来您正试图在本机驱动程序端口上通过 HTTP 访问 MongoDB。
该应用程序旨在在 MongoDB 中创建数据库并填充集合。使用 docker-compose.yml 文件,这组 Docker 容器可以很好地与 Docker 配合使用。这些容器是遗留应用程序的一部分(同一个 pod 中还有其他容器),我对它们的内容没有太多控制权。
我检查了各种容器的日志。已使用“kubectl get pods”查看了所有库存 pod,并且一切正常。 CNI 使用“flannel”,所以使用下面的代码来初始化 Kubernetes。
kubeadm init --pod-network-cidr=10.244.0.0/16
【问题讨论】:
-
你会尝试
curl http://mongodb:27017来查看输出吗?应用程序和 mongodb 是否在同一个 pod 中?
标签: mongodb docker kubernetes