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

Node.js无法通过Docker连接PostgreSQL数据库的问题求助

解决本地Node.js服务无法连接Docker中PostgreSQL的问题

你遇到的getaddrinfo ENOTFOUND db错误,核心原因是本地运行的Node.js进程不在Docker Compose创建的专属网络中,无法解析Docker Compose服务名db——这个域名仅在Docker内部网络有效,本地系统的DNS无法识别它。

场景1:本地运行Node.js服务,连接Docker中的PostgreSQL

修改server.js里的数据库连接配置,将host从"db"替换为"localhost"(Docker已将PostgreSQL的5432端口映射到本地):

var pool = new Pool({
  user: "postgres", 
  host: "localhost", // 替换原"db"
  password: "root", 
  port: 5432
});

修改后重新运行node server,即可通过本地映射端口访问Docker内的PostgreSQL。

场景2:通过Docker Compose一同运行服务与数据库(推荐)

如果希望服务和数据库都在Docker网络中协同运行,保持server.js里的host: "db"不变,直接执行docker compose up启动所有服务即可。此时Node服务容器与数据库容器处于同一Docker网络,能正常解析db域名,访问后会返回预期的"Tables created successfully"。

你之前的问题本质是本地单独运行Node服务,但配置使用了Docker内部的服务名,导致域名解析失败。

额外优化建议

  1. 用环境变量管理配置,避免硬编码
    在docker-compose.yml的server服务中添加环境变量:

    services:
      server:
        build: .
        ports: 
          - "8080:8080"
        environment:
          - DB_HOST=db
          - DB_USER=postgres
          - DB_PASSWORD=root
          - DB_PORT=5432
    

    然后在server.js中读取环境变量,实现本地与Docker环境的自动适配:

    var pool = new Pool({
      user: process.env.DB_USER || "postgres",
      host: process.env.DB_HOST || "localhost",
      password: process.env.DB_PASSWORD || "root",
      port: process.env.DB_PORT || 5432
    });
    
  2. 确保PostgreSQL就绪后再启动Node服务
    在docker-compose.yml中添加健康检查配置,避免Node服务因数据库未完全启动而连接失败:

    services:
      server:
        build: .
        ports: 
          - "8080:8080"
        environment:
          - DB_HOST=db
          - DB_USER=postgres
          - DB_PASSWORD=root
          - DB_PORT=5432
        depends_on:
          db:
            condition: service_healthy
      db:
        image: 'postgres'
        ports:
          - '5432:5432'
        environment:
          POSTGRES_USER: 'postgres'
          POSTGRES_PASSWORD: 'root'
        healthcheck:
          test: ["CMD-SHELL", "pg_isready -U postgres"]
          interval: 5s
          timeout: 5s
          retries: 5
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 13:16:21