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: 55432ContainerPort: 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 生成)

相关推荐
lichenyang4531 天前
Docker 学习笔记(五):Docker Compose,用一个 YAML 启动前端、后端和 MongoDB
docker
lichenyang4531 天前
Docker 学习笔记(四):Dockerfile,把项目打成自己的镜像
docker·容器
lichenyang4531 天前
Docker 学习笔记(三):Docker 网络、bridge、子网和容器互通
docker·容器
lichenyang4531 天前
Docker 学习笔记(二):docker run 的参数到底在控制什么?
docker·容器
Patrick_Wilson6 天前
从「改个端口」到 502:Next.js on k8s 的容器端口、Service 映射与 env 覆盖
docker·kubernetes·next.js
Suroy6 天前
DockerView-Go:用 Go 写一个终端 Docker 监控工具,顺便做了个 Web 仪表盘
docker
云恒要逆袭6 天前
运行你的第一个Docker容器
后端·docker·容器
宋均浩7 天前
# Docker 镜像瘦身实战:从 1.2G 到 80MB 的五个优化步骤
ci/cd·docker
程序员老赵8 天前
10 分钟部署 OpenCode:Docker 一键安装,浏览器打开就能用 AI 写代码(附完整命令与排错)
docker·容器·ai编程
WangMingHua1118 天前
LM Studio Docker 部署——本地大模型一键启动
docker