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

NestJS + TypeOrmModule 无法连接Docker部署的PostgreSQL问题

NestJS 无法连接PostgreSQL的排查与修复

常见问题1:网络环境不匹配(NestJS也用Docker部署时)

如果你的NestJS应用同样通过Docker运行(比如和PostgreSQL在同一个docker-compose配置里),配置里的host: 'localhost'会指向NestJS容器自身,而非PostgreSQL容器。

Docker Compose会为每个服务分配内部域名,此时需要将TypeOrm配置中的host替换为docker-compose.yml里PostgreSQL服务的名称db:

TypeOrmModule.forRoot({
  type: 'postgres',
  host: 'db', // 替换为docker-compose中的服务名
  port: 5432,
  username: 'postgres',
  password: 'pass123',
  database: 'postgres',
  autoLoadEntities: true,
  synchronize: true,
}),

常见问题2:PostgreSQL容器未就绪或端口冲突(NestJS本地运行时)

如果NestJS直接在本地运行,按以下步骤排查:

  • 确认容器状态:执行docker ps,查看db容器是否处于Up状态,端口映射是否显示0.0.0.0:5432->5432/tcp
  • 检查端口占用:本地5432端口可能被其他PostgreSQL进程占用:
    • Windows:netstat -ano | findstr :5432
    • macOS/Linux:lsof -i :5432
      若有占用,要么停止该进程,要么修改docker-compose.yml的端口映射(比如改为5433:5432,同时将NestJS配置的port改为5433)
  • 等待容器初始化:PostgreSQL启动需要时间,可通过docker-compose logs db查看日志,当出现database system is ready to accept connections后再启动NestJS

也可以给docker-compose.yml添加健康检查,确保容器就绪后再允许连接:

version: "3"
services:
  db:
    image: postgres
    restart: always 
    ports:
      - "5432:5432"
    environment:
       POSTGRES_PASSWORD: pass123
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 5s
      timeout: 5s
      retries: 5

内容的提问来源于stack exchange,提问作者Antonio Pavicevac-Ortiz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 00:17:11