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,需确保配置文件被正确挂载并加载:
- 本地创建
config目录,放入修改后的配置文件:postgresql.conf:设置port = 5433、listen_addresses = '*'pg_hba.conf:添加host all all 0.0.0.0/0 md5
- 修改
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
相关产品推荐
相关产品推荐

