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 生成)

相关推荐
小张同学a.18 小时前
Docker 容器实战 1—— docker 基础与镜像构建
linux·运维·docker·容器
NJCloud19 小时前
Docker 容器技术入门:部署、核心概念与基础命令
运维·docker·容器
2601_9620723319 小时前
docker自建rustdesk-server远程桌面
运维·docker·容器
pnoker20 小时前
从零部署 IoT DC3:四步快速启动实录
物联网·docker·部署
虎王物联20 小时前
RK3568嵌入式Linux跑Docker:内核配置排查到AIoT容器化的完整路径
linux·运维·docker·rk3568·aiot·嵌入式linux
缘友一世1 天前
GLM-5.3-NVFP4 部署实战系列[二]Docker 镜像选择与补丁镜像构建:纯 Python overlay,不重编一行 CUDA
python·docker·容器·vllm
l1t1 天前
DeepSeek总结的修复pgrust v0.2 #83:generate_series 聚合及其底层的两个成本 - #84
数据库·postgresql
数字化小张1 天前
Docker镜像优化——从1GB到100MB的瘦身实践
docker
java_logo1 天前
Docker 部署 MinIO:轻松搭建 S3 兼容对象存储平台
运维·docker·容器·对象存储·minio·轩辕镜像·minio部署
郝学胜-神的一滴1 天前
C++11 工程级应用 06:自己造一个类似Python的Range迭代器
开发语言·c++·windows·python·程序人生·microsoft