Windows Docker 部署 PostgreSQL 踩坑:5432 端口被 Hyper-V 保留,容器无法启动

Windows Docker 部署踩坑记:端口被 Hyper-V 占用

问题现象

ports:
  - "5432:5432"

Docker Compose up 报错:

Error response from daemon: ports are not available: exposing port TCP 0.0.0.0:5432
→ listen tcp 0.0.0.0:5432: bind: An attempt was made to access a socket 
  in a way forbidden by its access permissions.

排查

netstat -ano | findstr :5432 → 端口没人用。

**netsh int ipv4 show excludedportrange protocol=tcp** 发现原因:

开始端口    结束端口      
----------    --------      
      5380        5479       ← 5432 在这里面!

根因

Windows 开启 Hyper-V 后,系统会自动预留一段端口范围给 Hyper-V 使用。设备预留了 5380-5479,而 PostgreSQL 默认端口 5432 正好在这个范围

Docker Desktop 在 Windows 上依赖 Hyper-V 运行 Linux 容器,所以无法使用这段保留端口——与有没有进程在监听无关。

解决

ports:
  - "5433:5432"   # 宿主机:容器内部

宿主机端口从 5432 改为 5433(不在排除范围内),容器内部 5432 不变。其他容器通过 Docker 内部网络连 postgres:5432 不受影响。

posted @ 2026-07-07 22:08  菠萝包与冰美式  阅读(14)  评论(0)    收藏  举报