ECONNREFUSED 127.0.0.1:5432

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

Вопрос:

Я новичок в узлах, гнездах и докерах, но каким-то образом мне была поручена работа по докеризации всех существующих приложений node js.

Я последовал одному из учебников по YouTube и успешно развернул базовый hello world через docker, но в следующем учебнике по YouTube, когда я пытаюсь добавить Postgres в docker, у меня возникают некоторые проблемы при подключении к Postgres.

Я использую рабочий стол docker на Mac.

Вот docker-compose.yml фрагмент кода моего файла

 version: "3.9"  # optional since v1.27.0
services:
  api:
    build:
      dockerfile: Dockerfile
      context: .
    depends_on:
      - postgres
    environment:
      DATABASE_URL: postgres://user:password@postgres:5432/db
      NODE_ENV: developement
      PORT: 3000
    ports:
      - "8080:3000"
  postgres:
    image: postgres:14.0
    ports:
      - "35000:5432"
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: db
 

Вот весь журнал ошибок

введите описание изображения здесь

Репозиторий этого проекта на Github

Заранее благодарю вас за помощь 🙂

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

1. Я думаю, что проблема была в коде, код API подключается к 127.0.0.1 и не использует env DATABASE_URL . Пожалуйста, проверьте структуру кода подключения и убедитесь, что используете DATABASE_URL

2. Попробуйте изменить имя хоста базы данных, чтобы ваше api соединение было включено postgres:5432 . Использование 127.0.0.1 предназначено для случаев, когда вы хотите подключиться из-за пределов вашей док-сети, и тогда вам потребуется использовать порт 127.0.0.1:35000 .

3. не могли бы вы прикрепить файл Dockerfile и файл проекта, связанный с al

4. добавлен проект на github github.com/prafful-panwar/docker-node-nest.git @NaorTedgi

5. @Pooya Я также добавил ссылку на репозиторий GitHub. URL-адрес базы данных находится в файле app.module.ts url-адрес файла: process.env.DATABSE_URL,

Ответ №1:

Ваша проблема из-за опечатки в DATABASE_URL . В коде для подключения базы данных используйте DATABSE_URL word, но в docker-используется compose DATABASE_URL .

Вам следует изменить url: process.env.DATABSE_URL на url: process.env.DATABASE_URL

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

1. обновлено, но все та же ошибка 🙁

2. Используются ли docker-compose up --build они ?

3. докер-составьте

4. Вы должны использовать --build аргумент with, потому что вы изменили код и вам нужно сначала построить, а затем запустить снова

5. докер-составьте-сборка сработала. большое спасибо.

Ответ №2:

Убедитесь, что ваша строка подключения указана правильно в вашем docker-compose.yml . Просто передайте хост, порт, пользователя и передайте отдельно, и пусть TypeOrm обрабатывается соединение.

 // app.module.ts
TypeOrmModule.forRoot({
    type: 'postgres',
    host: process.env.POSTGRES_HOST,
    port: process.env.POSTGRES_PORT,
    username: process.env.POSTGRES_USER,
    password: process.env.POSTGRES_PASSWORD,
    database: process.env.POSTGRES_DB,
 })
 

И ваш докер-compose.yml:

 # docker-compose.yml
version: '3.9'
services:
  api:
    build:
      dockerfile: Dockerfile
      context: .
    depends_on:
      - postgres
    environment:
      - POSTGRES_HOST=postgres
      - POSTGRES_PASSWORD=promo-pass
      - POSTGRES_USER=promo-user
      - POSTGRES_DB=promo-api-db
      - POSTGRES_PORT=5432

  postgres:
    container_name: postgres
    image: postgres
    environment:
      POSTGRES_USER: promo-user
      POSTGRES_PASSWORD: promo-pass
      POSTGRES_DB: promo-api-db