Ошибка SequelizeConnectionRefusedError: ошибка подключения ECONREFUSED 127.0.0.1:4321

#node.js #postgresql #docker #docker-compose #sequelize.js

#node.js #postgresql #docker #docker-создать #sequelize.js

Вопрос:

Я использую Sequelize ORM с диалектом PostgreSQL, размещенным в контейнере docker, работающем на localhost. Приложение запускается через порт 3050, а база данных через порт 5432 перенаправляется на 4321.

Ошибка:

 Server is running on port: 3050
Unable to connect to the database: SequelizeConnectionRefusedError: connect ECONNREFUSED 127.0.0.1:4321
  

docker-compose.yml

 version: "3"

services:
  app:
    build: .
    command: yarn start
    ports:
      - "3050:3050"
    depends_on:
      - postgres
    volumes:
      - .:/home/app/medtech
      - /home/app/medtech/node_modules
  postgres:
    image: postgres:alpine
    ports:
      - "4321:5432"
    environment:
      POSTGRES_USER: postgres
      POSTGRES_DB: medtech_dev
      POSTGRES_PASSWORD: uaz0ZWrsCeUG3271GsRB
  

Мой фрагмент подключения к БД

 import Sequelize from 'sequelize';
import Constants from '../utils/constants';

const sequelize = new Sequelize(
  Constants.database.name,
  Constants.database.user,
  Constants.database.password, {
    host: Constants.database.host,
    port: Constants.database.port,
    dialect: 'postgres',
    pool: {
      max: 10,
      min: 0,
      acquire: 10000,
      idle: 20000,
    },
    timezone: Constants.timezone,
  },
);
  

Значения констант взяты из my .env:

 DATABASE_PORT=4321
DATABASE_HOST=localhost
DATABASE_NAME=medtech_dev
DATABASE_USER=postgres
DATABASE_PASSWORD=uaz0ZWrsCeUG3271GsRB
  

По какой-то причине, которую я не знаю, я использую отдельный файл для запуска своих исходных данных и миграций, используя точно такие же константы базы данных, и это работает. Вот:

 const Constants = require('../utils/constants').default;

module.exports = {
  username: Constants.database.user,
  port: Constants.database.port,
  password: Constants.database.password,
  database: Constants.database.name,
  host: Constants.database.host,
  dialect: 'postgres',
};
  

После многих изменений, которые я внес в свои файлы, и многих прочитанных мной потоков я не могу понять, что вызывает эту проблему. Я впервые использую Docker, и я не знаю, действительно ли что-то не так с моими конфигурационными файлами Docker или какая-то другая ошибка.

Я ценю любую помощь.

Комментарии:

1. Пожалуйста, добавьте значения констант

Ответ №1:

контейнер вашего приложения и postgres работают в двух разных контейнерах, это означает, что это две разные машины, каждая машина имеет свой собственный IP.

вы не можете вызвать службу postgres из вашего контейнера приложений с помощью localhost:postgresport и наоборот, из postgres в контейнер приложений

кажется, что Constants.database.host это localhost или 172.0.0.1, чтобы получить доступ к контейнеру postgres, вам нужно вызвать IP контейнера или имя или имя службы

в вашем случае измените Constants.database.host значение на postgres и попробуйте

Комментарии:

1. Значения констант были получены из файла .env, значения которого совпадают с теми, которые мы имеем в docker-compose.yml. Я сменил хост на ‘postgres’ и получил ту же ошибку с другим IP: 172.19.0.2:4321

2. 4321 является ли открытый порт сторонним докером, если вы собираетесь вызвать его из другого контейнера в той же сети, вам необходимо сменить порт на локальный порт 5432 , поэтому измените номер порта на 5432

3. Это отлично сработало. Большое вам спасибо! И теперь я понял причину, по которой мои миграции и исходные данные работают с localhost:4321 это просто потому, что я тогда работал вне docker.