【问题标题】:Not able to connect by using network on docker to mongodb running in docker container other container with node js无法通过使用 docker 上的网络连接到在 docker 容器中运行的 mongodb 其他具有节点 js 的容器
【发布时间】:2020-12-08 10:54:42
【问题描述】:

我在一个名称为 favorites-net 的 docker 中创建了一个网络,以及两个名称如下的容器:-

1)。 mongodb(来自 docker hub mongodb 的正常运行映像)。

2)。收藏夹(有简单的 nodejs 项目尝试连接 mongodb 数据库)

我用过的连接代码

mongoose.connect(
  // 'mongodb://localhost:27017/swfavorites',  ###Working Properly by using this###
  'mongodb://mongodb:27017/swfavorites',       ### Not Working by using this###
  { useNewUrlParser: true },
  (err) => {
    if (err) {
      console.log(err);
    } else {
      app.listen(3000);
    }
  }
);

Dockerfile

FROM node

WORKDIR /app

COPY package.json .

RUN npm install

COPY . .

CMD ["node", "app.js"]

常用来构建图像

docker build -t favorites-node .

用于运行 Node Js 容器的命令

docker run --name favorites --network favorites-net -d -p 
3000:3000 favorites-node

MongoDB Container 处于运行状态

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES  
56aeba0a7f2f        mongo               "docker-entrypoint.s…"   55 minutes ago      Up 14 seconds       27017/tcp           mongodb

检查docker logs favorites时出错

MongoNetworkError: failed to connect to server [mongodb:27017] on first connect [Error: getaddrinfo ENOTFOUND mongodb
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:67:26) {
  name: 'MongoNetworkError'
}]
    at Pool.<anonymous> (/app/node_modules/mongodb/lib/core/topologies/server.js:438:11)
    at Pool.emit (node:events:376:20)
    at /app/node_modules/mongodb/lib/core/connection/pool.js:562:14
    at /app/node_modules/mongodb/lib/core/connection/pool.js:995:11
    at /app/node_modules/mongodb/lib/core/connection/connect.js:32:7
    at callback (/app/node_modules/mongodb/lib/core/connection/connect.js:280:5)
    at Socket.<anonymous> (/app/node_modules/mongodb/lib/core/connection/connect.js:310:7)
    at Object.onceWrapper (node:events:483:26)
    at Socket.emit (node:events:376:20)
    at emitErrorNT (node:internal/streams/destroy:188:8)
    at emitErrorCloseNT (node:internal/streams/destroy:153:3)
    at processTicksAndRejections (node:internal/process/task_queues:80:21)

【问题讨论】:

  • 请不要使用截图显示代码
  • @Anatoly 抱歉,我已删除屏幕截图并重新格式化。你能建议我如何解决这个问题吗?
  • 如果可能,来自终端的错误也应该是文本。请显示描述这两个容器的两个 docker 文件。你不使用 docker-compose 吗?
  • 我还添加了来自终端获取和上面所有其他文件的错误。
  • 好的,谢谢,我的 MongoDB 解决问题与我的 nodejs 容器在 docker 中运行的网络不同,现在它工作正常

标签: node.js mongodb docker dockerfile


【解决方案1】:

mongodb端口未发布,

请运行已发布端口的 mogodb 容器 docker run -d --name mongodb -p 27017:27017 --network favorites-net mongo

【讨论】:

  • 我们为节点 js 和 docker 容器使用相同的网桥,它们内部连接的任何内容都表明我们不需要保护外部端口 -p : 它可以正常工作。
  • 是的,你是对的@MayankRai,在 user_defined_bridge_network 中,所有端口都对连接到网络的所有服务开放
【解决方案2】:

我的 MongoDB 的问题与我的 nodejs 容器在 docker 中运行的网络不同,现在它工作正常

用于在同一网络上运行 MongoDB 的命令

docker run -d --name mongodb --network favorites-net mongo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-21
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多