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

Docker容器中PostgreSQL连接报错:Connection terminated unexpectedly

解决Docker PostgreSQL容器与Express/pg库连接时的"Connection terminated unexpectedly"错误

核心问题分析

你遇到的连接错误,主要是两个关键配置不匹配导致的:

  1. 端口映射逻辑错误:PostgreSQL默认监听容器内的5432端口,但你的Docker命令用了-p 2345:2345,容器内的Postgres根本没在2345端口启动,外部自然无法连接。
  2. 数据库名称不匹配:你启动容器时未指定POSTGRES_DB环境变量,PostgreSQL会默认创建与用户名同名的数据库admin,但代码里写的是betsdb,这个数据库并不存在。

具体解决方案

方案1:修正端口映射(推荐,使用Postgres默认端口)

修改Docker启动命令,将容器内默认的5432端口映射到主机的2345:

docker run --name postgres-container -p 2345:5432 -e POSTGRES_PASSWORD=password123 -e POSTGRES_USER=admin -e POSTGRES_DB=betsdb -d postgres

同时调整TypeScript代码,确保数据库名称正确,并且全局初始化连接池(不要在请求内重复创建):

import { Pool } from 'pg';
import { Request, Response } from 'express';

// 全局初始化连接池,复用连接资源
const pool = new Pool({
    user: 'admin',
    host: 'localhost',
    database: 'betsdb',
    password: 'password123',
    port: 2345,
});

app.get("/hello", async (request: Request, response: Response) => {
    console.log("trying connection");
    try {
        const client = await pool.connect();
        console.log("success");
        client.release(); // 必须释放客户端,避免连接泄漏
        response.send("Database connected successfully");
    } catch (err) {
        console.error("Connection failed:", err);
        response.status(500).send("Connection error");
    }
});

方案2:强制让容器内Postgres运行在2345端口

如果你一定要用2345作为容器内的端口,需要通过环境变量指定Postgres的监听端口:

docker run --name postgres-container -p 2345:2345 -e POSTGRES_PASSWORD=password123 -e POSTGRES_USER=admin -e POSTGRES_DB=betsdb -e POSTGRES_PORT=2345 -d postgres

代码部分和方案1一致,保持端口为2345即可。


额外验证步骤

  1. 进入容器验证端口监听:

    docker exec -it postgres-container bash
    # 执行后在容器内运行
    netstat -tulpn | grep postgres
    

    确认输出显示Postgres监听了你指定的端口(方案1是5432,方案2是2345)。

  2. 验证数据库存在:

    docker exec -it postgres-container psql -U admin -d betsdb
    

    如果能正常进入数据库交互界面,说明库已创建成功。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 00:02:49