经济拒绝 127.0.0.1:5432

ECONNREFUSED 127.0.0.1:5432

我是 node、nest 和 docker 的初学者,但不知何故我被分配了一份工作来 docker 化所有现有的 node js 应用程序。

当我尝试将 Postgres 添加到 docker 时,我遵循了其中一个 youtube tutorial and successfully deployed the basic hello world via docker but in the next youtube tutorial 我在连接到 Postgres 时遇到了一些问题。

我在 mac 上使用 docker 桌面。

这是我的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 Repository

感谢您的提前帮助:)

您的问题是 DATABASE_URL 中的拼写错误。在 code 中连接数据库使用 DATABSE_URL 字,但在 docker-compose 中使用 DATABASE_URL.

您应该将 url: process.env.DATABSE_URL 更改为 url: process.env.DATABASE_URL

确保 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,
 })

还有你的docker-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