为什么通过docker网络连接到MongoDB 4的Node.js 12 docker应用程序在通过公共网络进行连接时会给出超时?

问题描述 投票:0回答:1

我看到一个我根本无法解释的问题:将Meteor应用升级到1.9版并升级到Node.js 12之后,我们还必须将Docker容器切换到基于Node.js 12的容器。在我们的例子中,我们使用abernix/meteord:node-12-basegit)。

启动更新的应用程序后,我们在应用程序的Docker容器中收到数据库超时:

/bundle/bundle/programs/server/node_modules/fibers/future.js:313
                                               throw(ex);
                                               ^

MongoTimeoutError: Server selection timed out after 10000 ms
    at Timeout._onTimeout (/bundle/bundle/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb-core/lib/sdam/topology.js:773:16)
    at listOnTimeout (internal/timers.js:531:17)
    at processTimers (internal/timers.js:475:7) {
  name: 'MongoTimeoutError',
  [Symbol(mongoErrorContextSymbol)]: {}
}

以下MONGO_URL会发生这种情况:

❌mongodb:// root:OurPw @ mongo-docker-alias:27017 / meteor?authSource = admin

很有趣,当我们在MongoDB容器中公开端口27017时,以下MONGO_URL才起作用:

✔️mongodb:// root:OurPw @ docker-host:27017 / meteor?authSource = admin

现在我以为我们遇到了docker问题,但是如果我在Node.js 12 meteord容器内贴上bash,请安装MongoDB shell并尝试连接:

✔️mongo“ mongodb:// root:OurPw @ mongo-docker-alias:27017 / meteor?authSource = admin”

也可以使用。

现在我一无所获。我尝试了v4.0和4.2.3之间以及Node.js 12.14和12.10之间的多个MongoDB docker映像。而且我还尝试了一次不使用MongoDB身份验证,只是为了排除问题,但结果始终是相同的。

任何想法都将不胜感激,因为我想避免不得不通过裸露的端口和码头工人主机的名称进行连接,因为这显然很容易出错...

node.js mongodb docker networking meteor
1个回答
0
投票

检查/etc/mOngd.conf文件中的网络绑定。您可能需要允许它在所有网络接口上做出响应,因为网络在公开(或不公开)时可能是不同的ip /子网,这可能解释了为什么它在某些情况下可以工作]

© www.soinside.com 2019 - 2024. All rights reserved.