node.js - 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)。但每当我是deploying
我docker-compose
的启动应用程序时,总是给MongoNetworkError
我TransientTransactionError
. 几个小时以来,我无法理解问题出在哪里。
另一件奇怪的事情是,当我运行 docker-compose 文件时,我收到以下日志:
Creating network server_default
Creating network server_webnet
Creating service server_mongo
Creating service server_feed-grabber
难道这两种服务都在不同的网络中?如果是,那么如何解决这个问题?
其他信息:
- 在我尝试过的node.js应用程序MongoDB uri中
mongodb://mongo:27017/MyDB
- 我正在使用以下命令运行 docker-compose:
docker stack deploy -c docker-compose.yml server
- 我的 node.js 映像是 Ubuntu 18
任何人都可以帮助我吗?
解决方案
好的,所以我尝试了几件事,在花了很多小时后我终于想通了。我做错了两件事,他们在最后一点上打击了我:
docker 启动的第一件事是记录显示它正在创建两个网络
server_default
,server_webnet
这是第一个错误。两个容器在工作时应该在同一个网络中。我需要首先运行 Mongo 容器作为我的 Node.js 应用程序的第二件事是首先运行
depend_on
Mongo 容器。这正是我在 docker-compose 配置中通过引入depend_on
属性所做的。
推荐阅读
- python - 尝试在定义循环中使用双重条件(?)
- html - 输入表单对某些旧浏览器没有反应
- c++ - 编译器将变量声明与函数原型混淆
- mysql - 本地数据库的 AngularJS API,从哪里开始?
- angular - 如何在角度 4 中使用 [(ngModel)] 创建不同的实例
- vba - 如何在 VBA 中创建带有复选框的自定义消息框?
- java - 导入 com.fasterxml.jackson.databind.ObjectMapper 无法解析
- python - Pandas 读取数据表前面带有字符的 CSV 文件
- php - PDO 绑定因 PostgreSQL 窗口函数参数而失败
- php - ZEND Left Join Distinct 查询