You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker-Compose启动Node+Postgres应用报错ECONNREFUSED 127.0.0.1:5432求解决

解决Docker-compose启动Node+Postgres的连接拒绝问题

你的问题出在三个核心点上,对应修改方案如下:

1. 修正Node应用的数据库连接地址

错误提示里的127.0.0.1:5432说明你的Node代码硬写了本地回环地址,但在Docker容器环境中,127.0.0.1指向Node容器自身,而非Postgres容器。

你已经在api服务的环境变量里配置了DB_HOSTNAME: db,必须确保Node代码中的数据库连接配置使用这个环境变量,而非固定的127.0.0.1。示例代码如下:

// 正确使用环境变量的连接配置
const dbHost = process.env.DB_HOSTNAME || 'localhost';
const connectionString = `postgresql://${process.env.DB_USERNAME}:${process.env.DB_PASSWORD}@${dbHost}:5432/${process.env.DB_NAME}`;

2. 修正Postgres容器的端口与数据库初始化配置

Postgres镜像默认使用容器内的5432端口,你当前的db服务端口映射写的是"5430:5431",这会导致Postgres容器使用未配置的非默认端口,直接修改为:

services:
  db:
    image: postgres:10
    ports:
    - "5430:5432"  # 宿主机5430端口映射到容器内默认的5432端口
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: TestDB6  # 启动时自动创建指定数据库,避免Node连接时数据库不存在

添加POSTGRES_DB: TestDB6环境变量,让Postgres启动时自动创建你需要的数据库,否则Node连接时会因数据库不存在报错。

3. 确保Postgres就绪后再启动Node服务

Postgres容器启动需要时间完成初始化,Node服务可能在数据库未就绪时就发起连接,导致连接拒绝。通过健康检查+依赖等待解决:

修改docker-compose.yml,给db服务添加健康检查,让api服务等待数据库就绪后再启动:

version: '2.2'

services:
  db:
    image: postgres:10
    ports:
    - "5430:5432"
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: TestDB6
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres -d TestDB6"]
      interval: 5s
      timeout: 5s
      retries: 5
  api:
    build: .
    environment:
      DB_USERNAME: postgres
      DB_PASSWORD: postgres
      DB_NAME: TestDB6
      DB_HOSTNAME: db
    ports:
      - 8081:8081
    depends_on:
      db:
        condition: service_healthy

完成以上修改后,重新执行docker-compose up --build即可启动服务。

内容的提问来源于stack exchange,提问作者ajay bapat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 03:50:41