【问题标题】:Unable to Connect From Dockerized Node Program to Localhost Mongodb无法从 Dockerized 节点程序连接到 Localhost Mongodb
【发布时间】:2016-12-21 13:46:01
【问题描述】:

我可以 npm 从 cmd 启动代码并让它与 mongodb 一起运行,但是 docker build 代码和 docker run 它会生成此错误:

/usr/src/app/node_modules/mongoose/node_modules/mongodb/lib/server.js:265
        process.nextTick(function() { throw err; })
                                      ^
MongoError: failed to connect to server [127.0.0.1:27017] on first connect
    at null.<anonymous> (/usr/src/app/node_modules/mongoose/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:325:35)
    at emitOne (events.js:77:13)
    at emit (events.js:169:7)
    at null.<anonymous> (/usr/src/app/node_modules/mongoose/node_modules/mongodb/node_modules/mongodb-core/lib/connection/pool.js:270:12)
    at g (events.js:260:16)
    at emitTwo (events.js:87:13)
    at emit (events.js:172:7)
    at Socket.<anonymous> (/usr/src/app/node_modules/mongoose/node_modules/mongodb/node_modules/mongodb-core/lib/connection/connection.js:173:49)
    at Socket.g (events.js:260:16)
    at emitOne (events.js:77:13)
    at Socket.emit (events.js:169:7)
    at emitErrorNT (net.js:1269:8)
    at nextTickCallbackWith2Args (node.js:458:9)
    at process._tickCallback (node.js:372:17)

我的 app.js 正在侦听端口 8080,我在 dockerfile 上暴露了端口 8080 和 27017。我可以知道我还应该做什么来解决错误。我是这方面的初学者,请原谅我。

【问题讨论】:

  • 你也可以分享你的 docker 命令吗?
  • docker build -t ryan/edocker 。 docker run -p 8080:8080 -d ryan/edocker

标签: node.js mongodb docker mongoose


【解决方案1】:

您只暴露了8080,这就是它无法连接到27017 的原因! 而不是-p 8080:8080 使用-P 也暴露27017! 所以你的构建命令是这样的:

docker run -P -d ryan/edocker

【讨论】:

  • 你的 mongo 也在 docker 上吗?
  • 不。只有我的节点
  • 所以你的mongo ip地址不是127.0.0.1!它应该是您的主机 IP 地址:)
  • 我该如何检查配置是什么?哈哈。我认为它可以正常工作,因为它启动了,并且当我 npm 启动它时我能够访问 Node 的网站。它仅在我将其构建为由 docker 运行的映像时才会生成错误
  • 将此添加到您的 docker run --net=host 并保持 mongo 主机地址为 127.0.0.1!让我知道结果!
猜你喜欢
  • 1970-01-01
  • 2021-06-26
  • 2018-12-26
  • 1970-01-01
  • 2021-09-20
  • 1970-01-01
  • 1970-01-01
  • 2019-10-16
  • 2017-12-29
相关资源
最近更新 更多