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

NestJs应用连接PostgreSQL失败:getaddrinfo ENOTFOUND postgres

问题排查与解决方案

这个错误getaddrinfo ENOTFOUND postgres的核心是:你的NestJS应用无法解析到名为postgres的数据库服务,下面是具体排查和修复步骤:

1. 检查Docker网络归属

  • 确保NestJS应用容器和PostgreSQL容器处于同一个Docker网络。如果使用docker-compose,默认会自动创建专属网络,但如果是单独启动的应用容器,需要手动加入数据库所在网络。
  • 若你在docker-compose.yml中自定义了网络,需保证两个服务都配置在该网络下,示例:
version: '3.8'
services:
  app:
    build: .
    networks:
      - app-network
  postgres:
    image: postgres:15
    networks:
      - app-network
networks:
  app-network:
    driver: bridge

2. 修正数据库连接主机参数

  • 你的.env文件中,数据库主机必须设为postgres(即docker-compose.yml里PostgreSQL服务的名称),绝对不能写localhost或127.0.0.1——容器内的localhost指向容器自身,而非宿主机或其他容器。
  • 正确的.env配置示例:
DB_HOST=postgres
DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=your_db_password
DB_NAME=your_db_name

3. 确保数据库就绪后再启动应用

  • NestJS启动速度通常快于PostgreSQL,可能数据库还未初始化完成,应用就发起了连接请求。可以在docker-compose.yml中添加健康检查和依赖配置:
services:
  app:
    build: .
    depends_on:
      postgres:
        condition: service_healthy
  postgres:
    image: postgres:15
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 5s
      timeout: 5s
      retries: 5

4. 验证环境变量是否正确加载

  • 执行docker exec <你的应用容器名称> printenv,检查输出中的DB_HOST是否为postgres。如果不是,说明.env文件未正确挂载到容器中。
  • 在docker-compose.yml的app服务中,需明确配置加载.env:
services:
  app:
    build: .
    env_file:
      - .env
    # 或者通过挂载方式同步文件
    volumes:
      - ./.env:/app/.env

内容的提问来源于stack exchange,提问作者Laravel Liwevire Question

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 01:45:32