首页 > 解决方案 > Docker Express Node.js 应用程序容器未与 MongoDB 容器连接,给出错误 TransientTransactionError

问题描述

我处于一个奇怪的困境中。我创建了一个节点应用程序,该应用程序需要连接到 MongoDB(通过 docker 容器)我创建了一个docker-compose文件,如下所示:

version: "3"
services:
  mongo:
     image: mongo
     expose:
      - 27017
     volumes:
      - ./data/db:/data/db

  my-node:
    image: "<MY_IMAGE_PATH>:latest"
    deploy:
      replicas: 1
      restart_policy:
        condition: on-failure
    working_dir: /opt/app
    ports:
      - "2000:2000"
    volumes:
      - ./mod:/usr/app
    networks:
      - webnet
    command: "node app.js"
networks:
  webnet:

我正在使用 mongo 官方图片。我已经从上述配置中删除了我的 docker 映像。我已经设置了许多配置,但我无法连接到 mongoDB(是的,我也更改MongoDB了 node.js 应用程序中的 uri)。但每当我是deployingdocker-compose的启动应用程序时,总是给MongoNetworkErrorTransientTransactionError. 几个小时以来,我无法理解问题出在哪里。

另一件奇怪的事情是,当我运行 docker-compose 文件时,我收到以下日志:

Creating network server_default
Creating network server_webnet
Creating service server_mongo
Creating service server_feed-grabber

难道这两种服务都在不同的网络中?如果是,那么如何解决这个问题?

其他信息:

任何人都可以帮助我吗?

标签: node.jsmongodbdockerexpressdocker-compose

解决方案


好的,所以我尝试了几件事,在花了很多小时后我终于想通了。我做错了两件事,他们在最后一点上打击了我:

  1. docker 启动的第一件事是记录显示它正在创建两个网络server_defaultserver_webnet这是第一个错误。两个容器在工作时应该在同一个网络中。

  2. 我需要首先运行 Mongo 容器作为我的 Node.js 应用程序的第二件事是首先运行depend_onMongo 容器。这正是我在 docker-compose 配置中通过引入depend_on属性所做的。


推荐阅读