📌 核心错误
bind: An attempt was made to access a socket in a way forbidden by its access permissions.
→ 端口 9000 无法被 Docker 绑定,原因是权限或系统保留问题。
🔍 快速排查(3 步)
1️⃣ 检查端口占用
netstat -ano | findstr :9000
- 有输出 → 杀掉对应 PID:
taskkill /PID <PID> /F
2️⃣ 检查系统保留端口(Windows 特有)
netsh interface ipv4 show excludedportrange protocol=tcp
- 如果
9000在里面 → 端口被系统保留
3️⃣ 检查动态端口范围
netsh int ipv4 show dynamicport tcp
- 正常范围:
49152-65535
🛠️ 解决方案(按推荐度排序)
| 方案 | 操作 | 适用场景 |
|---|---|---|
| ✅ 换宿主机端口 | docker run -p 9001:9000 |
最快、最稳定,推荐日常开发 |
| ✅ 管理员运行 | 右键 PowerShell / Docker Desktop → 管理员 | 临时权限问题 |
| 🔁 重启 Docker / WSL | wsl --shutdown + 重启 Docker |
网络组件卡死 |
| 🔁 重置 HNS 网络 | net stop hns → net start hns |
Docker 网络残留问题 |
| ⚠️ 删除保留端口 | netsh int ipv4 delete excludedportrange ... |
高级操作,重启后可能恢复 |
| ⚠️ 重置动态端口范围 | netsh int ipv4 set dynamicport tcp start=49152 num=16384 |
动态范围被错误修改时 |
⚠️ 带 ⚠️ 的操作建议仅在明确知道后果时使用。
💡 一句话建议
优先换宿主机端口(如
-p 19000:9000),这是绕过 Windows 端口保留机制最稳定、最简单的方式。
如果必须用 9000,再考虑查保留端口、重启网络组件或管理员权限。