Windows Docker PostgreSQL 端口绑定失败问题记录

Windows Docker PostgreSQL 端口绑定失败问题记录


问题现象

  • 客户端连接 localhost:55432 报错:Connection refused (10061)

  • 执行 netstat -ano | findstr :55432 无任何输出,显示端口未被占用

  • Docker 容器状态为 Running,PostgreSQL 日志显示 database system is ready to accept connections,说明容器内服务正常

  • 容器配置显示端口映射为 HostPort: 55432 → ContainerPort: 5432,配置看似正确

根本原因

  1. Windows 系统端口排除范围(Hyper-V/WSL 保留端口)

    Windows 会为虚拟化网络预留一段端口,即使没有进程占用,也会在内核层面标记为 "不可用",普通进程(包括 Docker)无法绑定。55432 端口很可能落在这个范围内。

  2. Docker 网络模式冲突

    自定义网络(如 infra_default)在 Windows 上容易出现网络转发异常,导致端口映射失效。


解决方案(按优先级)

方案 1:重置 WinNAT(无需重启电脑,最有效)

作用:重置 Windows NAT 服务,释放被系统 "隐性锁定" 的端口。

操作步骤:

  1. 以 管理员身份 打开 PowerShell。

  2. 执行以下命令:

    powershell 复制代码
    net stop winnat
    net start winnat
  3. 重启 Docker Desktop。

  4. 尝试重新连接数据库。


方案 2:更换宿主机端口(100% 可解决,推荐)

放弃 55432,更换一个不在系统保留范围内的端口,例如 55666。

方式 A:使用 docker-compose.yml

修改配置文件:

yaml 复制代码
services:
  postgres:
    image: postgres:18
    container_name: aitsp-pg-dev
    environment:
      POSTGRES_PASSWORD: Admin@123456
    ports:
      - "55666:5432" # 宿主机端口:容器端口
    volumes:
      - infra_postgres-data:/var/lib/postgresql/18/data
    networks:
      - infra_default

volumes:
  infra_postgres-data:

networks:
  infra_default:

执行命令:

bash 复制代码
docker-compose down
docker-compose up -d
方式 B:直接使用 docker run 命令
bash 复制代码
docker run --name aitsp-pg-dev -e POSTGRES_PASSWORD=Admin@123456 -p 55666:5432 -d postgres:18

客户端连接地址改为:localhost:55666


方案 3:检查 Windows 保留端口范围

确认端口是否被系统保留:

powershell 复制代码
netsh interface ipv4 show excludedportrange protocol=tcp
  • 如果输出结果中包含 55432,说明端口被系统占用,只能通过方案 1 或方案 2 解决。

推荐操作顺序

  1. 先执行 方案 1(重置 WinNAT),重启 Docker 后尝试连接。

  2. 如果仍然失败,直接执行 **方案 2(更换端口)。

(注:文档部分内容可能由 AI 生成)

相关推荐
tedcloud12330 分钟前
Docker Compose 部署 Uptime Kuma:配置 HTTPS、QQ 邮箱告警与数据备份
服务器·网络协议·ui·docker·容器·https·开源
椒颜皮皮虾྅32 分钟前
模型部署不再卡在环境上:DeploySharp 四大推理引擎与 Windows/Linux 离线交付实战
linux·运维·开发语言·人工智能·windows·计算机视觉·cuda
昂好的day1 小时前
C# 同步异步与多线程:Thread / Task / 线程池一次讲透(上篇)
开发语言·windows·c#
垆边人似月.1 小时前
Ubuntu 配置 Samba 共享文件夹并映射到 Windows 完整指南
linux·windows·ubuntu
syntaxsage1 小时前
Dive:Docker 镜像层可视化分析工具
运维·其他·docker·容器
java_logo1 小时前
Docker 部署 Samba:轻松搭建局域网文件共享
运维·docker·容器·文件共享·samba·smb·轩辕镜像
余槐i1 小时前
PostgreSQL 加索引后查询反而更慢:优化器弃用索引的 3 种情形
spring boot·redis·mysql·postgresql·事务
todoitbo11 小时前
群晖NAS部署JmalCloud:Docker安装、文件管理、博客与公网访问完整教程
运维·docker·容器
BIBI204912 小时前
换 Git 托管平台怎么做?基于 TortoiseGit 的跨平台迁移教程
windows·git·tortoisegit·问题解决·版本控制·最佳实践
chushiyunen13 小时前
autoHotKey、windows自动化快捷键工具
运维·windows·自动化