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 不受影响。
浙公网安备 33010602011771号