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

Docker部署PostgreSQL数据库时连接被拒绝问题求助

PostgreSQL容器连接被拒绝(Connection refused)问题排查与解决

问题现象

psql: error: connection to server at "dev-db" (172.19.0.2), port 5433 failed: Connection refused

核心原因

PostgreSQL官方镜像默认监听5432端口,你在docker-compose.yml中指定容器端口为5433,但未确保容器内的Postgres服务实际切换到该端口运行;同时,Postgres初始化脚本仅在首次创建数据卷时执行,若之前已启动过容器,旧配置可能未被覆盖。


解决方案

步骤1:确认容器内Postgres实际监听端口

执行以下命令查看容器内端口监听状态:

docker exec postgres_db_container netstat -tulpn

若输出中无0.0.0.0:5433,说明Postgres仍使用默认的5432端口。

步骤2:正确配置Postgres使用5433端口

推荐两种可靠方式:

方式A:通过环境变量指定端口(最简)

在docker-compose.yml的dev-db服务中添加PGPORT环境变量,让Postgres启动时直接使用指定端口,无需手动修改配置文件:

version: '3.9'

services:
    dev-db:
        image: postgres:17.2-alpine3.21
        container_name: postgres_db_container
        restart: always
        ports: 
            - "5050:5433"
        env_file:
            - ./.env
        # 添加环境变量指定Postgres运行端口
        environment:
            - PGPORT=5433
        volumes:
            - ./scripts:/docker-entrypoint-initdb.d
    
    adminer:
        image: adminer 
        restart: always
        ports:
            - "8080:8080"

name: fastapi-development
方式B:挂载自定义配置文件(适合复杂配置)

若需手动修改postgresql.conf和pg_hba.conf,需确保配置文件被正确挂载并加载:

  1. 本地创建config目录,放入修改后的配置文件:
    • postgresql.conf:设置port = 5433、listen_addresses = '*'
    • pg_hba.conf:添加host all all 0.0.0.0/0 md5
  2. 修改docker-compose.yml:
version: '3.9'

services:
    dev-db:
        image: postgres:17.2-alpine3.21
        container_name: postgres_db_container
        restart: always
        ports: 
            - "5050:5433"
        env_file:
            - ./.env
        volumes:
            - ./scripts:/docker-entrypoint-initdb.d
            - ./config/postgresql.conf:/var/lib/postgresql/data/postgresql.conf
            - ./config/pg_hba.conf:/var/lib/postgresql/data/pg_hba.conf
        # 指定加载自定义配置文件
        command: postgres -c config_file=/var/lib/postgresql/data/postgresql.conf
    
    adminer:
        image: adminer 
        restart: always
        ports:
            - "8080:8080"

name: fastapi-development

步骤3:重置数据卷(若之前启动过容器)

Postgres初始化脚本仅在首次创建数据卷时执行,需删除旧数据卷以应用新配置:

docker-compose down -v
docker-compose up -d

步骤4:验证连接

进入容器测试端口连接:

docker exec -it postgres_db_container psql -U $POSTGRES_USER -p 5433

若能成功进入psql交互界面,说明端口配置生效,你的Shell脚本可正常运行。


内容的提问来源于stack exchange,提问作者Glenn Karl Guiyab

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 03:02:23