尝试访问MongoDB时超时

时间:2018-11-24 14:26:18

标签: node.js mongodb digital-ocean rancher

前期:我正在使用[Digital Ocean,Rancher,Docker,NodeJS,Mongoose]。

大家好,

我遵循了有关使用Rancher设置Docker环境的文章/教程:

https://www.digitalocean.com/community/tutorials/how-to-deploy-a-node-js-and-mongodb-application-with-rancher-on-ubuntu-16-04

主要区别在于我改用MongooseExpress

Rancher方面的所有工作都按预期进行;我可以缩放数据库,节点液滴等。

但是,从JS连接到MongoDB似乎无法正常工作。

如果我在服务器上点击/,则会得到静态的“ Hello,world!”。测试消息。但是,如果我遇到一条解析为尝试访问MongoDB的控制器方法的路由,则会挂起一段时间,直到最终得到504 Timeout

我已经确认我的MONGO_HOST环境属性正确无误。

我还确认可以通过ping从Rancher中指定的IP地址访问MongoDB主机。如果我尝试从网络外部ping来访问该IP,则该IP将无法访问。

在我的server.js文件中,我具有以下内容可以连接到Mongo:

mongoose.connect('mongodb://' + process.env.MONGO_HOST + '/api', { useNewUrlParser: true });

在Rancher中,我的NodeJS应用程序服务已链接到我的MongoDB服务。

在本地启动Mongo容器和应用程序容器时,它工作正常。该数据库中还没有数据,因此[]的响应是有效的。这是我希望在访问生产版本时看到的内容,但它只是超时。

任何人都对为什么会发生这种情况有任何见解?我的直觉告诉我某种形式的端口映射,但是指南没有在远程容器/ Rancher设置中提及任何内容。

更新1:

从使用Mongo的控制器中添加一些代码。

'use strict';

var mongoose = require('mongoose'),
  Event = mongoose.model('Events');

exports.list_all_events = function(req, res) {
  Event.find({}, function(err, event) {
    if (err)
      res.send(err);
    res.json(event);
  });
};

1 个答案:

答案 0 :(得分:0)

As name服务链接到Mongo服务时,通过设置NodeJS参数可以解决此问题。教程中对此进行了解释,但是前几次我却错过了。

我已经提供了设置此部分的屏幕截图,以防其他人对此感到困惑。

Where to enter the name of the service