Тайм-аут при попытке доступа к MongoDB - PullRequest
0 голосов
/ 24 ноября 2018

Предварительно: я использую [Digital Ocean, Rancher, Docker, NodeJS, Mongoose].

Привет всем,

Я следовал этой статье / учебнику по настройке среды Docker с использованиемRancher:

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

Основные отличия в том, что я использую Mongoose и Express.

Все работает, как и ожидалось, на стороне Rancher;Я могу масштабировать БД, ноды и т.д.

Однако подключение к MongoDB из JS, похоже, не работает.

Если я нажму / на сервере, я получумой статический "Привет, мир!"тестовое сообщение.Однако если я попадаю на маршрут, который разрешает метод контроллера, который пытается получить доступ к MongoDB, я на некоторое время зависаю, пока не получу 504 Timeout.

. Я подтвердил, что мое свойство среды MONGO_HOST находится в процессеправильно.

Я также подтвердил, что хост MongoDB доступен с IP-адреса, указанного в Rancher, через ping.Если я попытаюсь ping получить этот IP из-за пределов сети, он будет недоступен, что ожидается.

В моем файле server.js у меня есть следующее для подключения к Mongo:

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

В Rancher моя служба приложений NodeJS связана с моей службой MongoDB.

Локально, когда я запускаю контейнер Mongo и контейнер приложений, он работает нормально.В базе данных еще нет данных, поэтому ответ [] действителен.Это то, что я ожидаю увидеть при доступе к производственной версии, но вместо этого просто истекает время.

У кого-нибудь есть какие-либо идеи относительно того, почему это может произойти?Моя интуиция говорит мне о каком-либо отображении портов, но в руководстве ничего не говорится об этом в настройке удаленного контейнера / Rancher.

Обновление 1:

Добавление некоторого кода из контроллера, гдеМонго используется.

'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 голосов
/ 25 ноября 2018

Мне удалось решить эту проблему, установив параметр As name при подключении службы Mongo к службе NodeJS.Это объясняется в руководстве, но я пропустил его несколько раз.

Я включил снимок экрана с разделом, в котором это задано на случай, если кто-то еще будет озадачен этим.

Where to enter the name of the service

...