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

如何用docker-compose实现Postgres与Node.js连接?遇ECONNREFUSED错误

解决API无法连接PostgreSQL的ECONNREFUSED问题

1. 验证PostgreSQL服务状态

  • 执行docker-compose ps查看postgres容器运行状态,确认状态为Up。若容器处于Exit或Restarting状态,通过docker-compose logs postgres查看初始化日志,排查权限错误、挂载卷异常等启动问题。
  • 进入postgres容器测试服务可用性:docker-compose exec postgres psql -U <你的数据库用户名> -d <你的数据库名>,能成功进入则说明容器内PostgreSQL服务正常。

2. 修正API连接配置

  • 把API连接字符串中的静态IP(比如172.24.0.3)替换为docker-compose中postgres服务的服务名(通常是postgres),Docker Compose默认网络支持服务名解析,IP地址会随容器重启动态变化。
  • 核对连接配置的端口是否为5432(PostgreSQL默认内部端口),注意区分docker-compose.yml中ports字段的宿主机端口和容器内部端口,API连接应使用容器内部端口。
  • 确保API配置的用户名、密码、数据库名,与postgres服务的环境变量(POSTGRES_USER、POSTGRES_PASSWORD、POSTGRES_DB)完全一致。

3. 检查Docker网络连通性

  • 确认API服务与postgres服务处于同一Docker网络,默认情况下docker-compose会自动创建专属网络,所有服务默认加入该网络。若手动指定网络,需确保两个服务都配置了相同的networks字段。
  • 执行docker network inspect <你的compose网络名>(网络名一般为项目名_default),查看两个容器是否在同一网络列表中。

4. 确保PostgreSQL初始化完成后启动API

  • PostgreSQL首次启动或重启时需要时间完成初始化,若API启动速度过快会导致连接失败。在docker-compose.yml中为API服务添加依赖与健康检查配置:
    services:
      api:
        # 其他配置项
        depends_on:
          postgres:
            condition: service_healthy
      postgres:
        # 其他配置项
        healthcheck:
          test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
          interval: 5s
          timeout: 5s
          retries: 5
    
    配置后API会等待PostgreSQL完全就绪后再启动。

5. 排查网络限制

  • 确认宿主机防火墙未阻止Docker容器间的内部网络通信,Docker默认会配置内部网络规则,若使用自定义网络需确认无额外限制。

内容的提问来源于stack exchange,提问作者Sandeep M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 09:12:37