@nurzhannogerbek

SequelizeConnectionError в Node.js приложении?

Здравствуйте, товарищи! Столкнулся со странной проблемой, помогите пожалуйста разобраться.

Есть Node.js приложение. Данное приложение работает с базами данных MySQL и PostgreSQL. Использовал библиотеку sequelize для работы с ранее упомянутыми базами данных. На локальной машине (windows 10) проект работает. Запустил этот проект в Docker контейнере. Сам Docker стоит на CentOS сервере. Приложение работало пару дней без проблем, но вчера заметил проблему. Приложение не может подключиться к базе данных MySQL, при этом с подключением к PostgreSQL нет проблем. Как упоминал ранее локально проект без проблем подключается к MySQL. Также без проблем подключаюсь через иструменты dbForge/DBeaver.

MySQL.js:
const Sequelize = require('sequelize');

const sequelize = new Sequelize('database_name', 'username', 'password', {
    host: 'host',
    dialect: 'mysql',
    pool: {
        max: 15,
        min: 5,
        idle: 20000,
        evict: 15000,
        acquire: 30000
    },
});

sequelize.authenticate().then(() => {
    console.log('Connection to database has been established successfully.');
}).catch(err => {
    console.error('Unable to connect to database:', err);
});

module.exports = sequelize;


routes.js:
const express = require('express');

const router = express.Router();

const sequelize = require('../configurations/MySQL');
const Sequelize = require('sequelize');

const passport = require('passport');
require('../configurations/password')(passport);

router.post('/search_by_name', passport.authenticate('jwt', {session: false}, null), function(req, res) {
    const token = getToken(req.headers);
    if (token) {
        sequelize.query("LONG SQL QUERY", {
            replacements: {
                name: req.body.name,
            },
            type: Sequelize.QueryTypes.SELECT
        }).then((locations) => {
            res.status(200).send(locations)
        }).catch((error) => {
            res.status(400).send(error);
        });
    } else {
        return res.status(401).send({
            status: false,
            description: "Unauthorized"
        });
    }
});


Изначально я подумал, что проблема в том, что sequelize не закрывает подключения/пулы автоматически. Поэтому я несколько раз пересоздавал контейнер, чтобы обнулить все. К сожалению проблема не исчезла.

Может ли быть что проблема в самом Docker?! Какие у вас есть предположения? По умолчанию MySQL использует порт 3306. Может ли бы так, что Docker контейнер каким-то образом закрыл этот порт?
  • Вопрос задан
  • 1060 просмотров
Пригласить эксперта
Ответы на вопрос 1
bazilio91
@bazilio91
tochka.com, developer experience
Попробуй заменить firewalld на iptables и перегрузить машину. Так же есть смыл отказаться (за одно) от userland proxy.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы