分享程式代碼相關筆記
目前文章總數:240 篇
最後更新:2026年 07月 11日
Windows 啟用 Docker Desktop 時啟用特定的容器,突然無法啟動,問題是電腦重新開機前(重新開機後異常)仍是正常的
Docker Desktop 給出的完整錯誤紀錄 :
(HTTP code 500) server error - Ports are not available:
exposing port TCP 0.0.0.0:8188 -> 0.0.0.0:0: listen tcp 0.0.0.0:8188:
bind: An attempt was made to access a socket in a way forbidden by its access permissions.
看描述通常會推斷: 連接埠 8188 被其他程式佔用了 ,但這不可能,因為重新開機前都還是正常
因此此問題定位為: 被 Windows 的 Hyper-V 或 WSL2 動態保留了
開啟 Windows command Line ,輸入以下指令,檢查輸出的清單中,8188 是否落在某個保留範圍之內。
netsh interface ipv4 show excludedportrange protocol=tcp
執行後可以觀察到當前確實被 8178 - 8277 占用
最快的解決方案是重啟 NET 服務,來重置保留區
net stop hns
net start hns
再回到 Docker Desktop 啟動使用 PORT:8188 的容器,可以觀察到已恢復正常
再次輸入以下指令做驗證,可觀察到使用的 PORT 這次沒有被配置到 8188
netsh interface ipv4 show excludedportrange protocol=tcp
雖然重啟服務很有用,但難保哪天 Windows 重啟後又「抽籤」抽到
輸入以下指令,可以手動把 8188 註冊為 「Docker 專用」 的保留區。
netsh int ipv4 add excludedportrange protocol=tcp startport=8188 numberofports=1 store=persistent
雖然此方法可以徹底根除 Port 號不被 Docker 的 WSL 動態配置到,但其他「一般的 Windows 程式」將無法使用這個 Port。
未來若容器即使移除了, 未來也無法給一般的 Windows 應用程式使用此 Port 號
因此之後確定 WSL 不使用了此容器 Port 號,建議再輸入註銷註冊,讓此 Port 號釋放給 Windows 使用
netsh int ipv4 delete excludedportrange protocol=tcp startport=8188 numberofports=1 store=persistent