【问题标题】:Issue connecting a Node.js app to a MongoDB using docker-compose [duplicate]使用 docker-compose 将 Node.js 应用程序连接到 MongoDB 的问题 [重复]
【发布时间】:2020-12-07 22:10:15
【问题描述】:

嘿,我对 docker 还是很陌生,在理解使用 docker compose 创建的 docker 世界中容器如何相互交互时遇到了一些问题

我有一个包含 2 个服务的 docker-compose.yaml 文件:

  1. 假设创建 MongoDB 数据库的 MongoDB 服务
  2. 尝试连接到该 MongoDB 数据库的 Node.js 应用服务

当我尝试运行 docker-compose up 命令时,我收到一条错误消息,告诉我连接到我的 MongoDB 实例时出现问题。

info: Listening on port 3000...
error: uncaughtException: failed to connect to server [localhost:27017] on first connect [Error: connect ECONNREFUSED 127.0.0.1:27017
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1146:16) {
  name: 'MongoNetworkError'

这是我的 docker-compose.yaml 文件

version: '3.7'
services:
  mongodb:
    container_name: mongodb_container
    image: mongo:latest
    ports:
      - 27017:27017
    volumes:
      - mongodb_data_container:/data/db

  my_app: 
    container_name: my_app_container
    image: my_app:1.0
    ports: 
      - 3000:3000

谁能帮我解决这个问题?

【问题讨论】:

    标签: node.js mongodb docker docker-compose


    【解决方案1】:

    您没有提供网络信息,所以我想您使用的是默认网络。 在您的应用容器中,"localhost" 是您的容器 localhost(不是您的主机的 localhost)。

    不要使用“localhost”,而是在您的应用程序中使用容器名称“mongodb_container”连接到端口“27017”上的数据库(需要明确:27017 是您的 mongo 容器公开的端口,而不是在主机本地主机)。

    检查:https://docs.docker.com/compose/networking/

    默认情况下,Compose 会为您的应用设置一个网络。每个 服务的容器加入默认网络,并且两者都是 该网络上的其他容器可以访问,并且可以被该网络上的其他容器发现 它们的主机名与容器名称相同。

    【讨论】:

    • 感谢您提供我能够连接到 MongoDb 数据库的信息。但是现在当我尝试从 docker 容器中发送 curl 命令时 - curl mongodb_container:3000/api/user - 到节点应用程序我得到一个连接被拒绝 - curl:(7)无法连接到 mongodb_container 端口 3000:连接被拒绝
    • 我不明白,您将 api 端口与 mongodb 容器名称混合在一起。如果您想访问您的 API,可以尝试 curl on:my_app_container:3000/api/user
    • 非常感谢。这确实是我的错误。现在一切都很完美。
    • 不错!您可以接受我的回答来结束您的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 2018-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多