前期:我正在使用[Digital Ocean,Rancher,Docker,NodeJS,Mongoose]。
大家好,
我遵循了有关使用Rancher设置Docker环境的文章/教程:
主要区别在于我改用Mongoose
和Express
。
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设置中提及任何内容。
从使用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);
});
};