首頁

目前文章總數:240 篇

  

最後更新:2026年 07月 11日

0109. Windows 平台開發者的隱形大坑:如何解決 Docker 埠位被系統綁架的 Socket 權限錯誤

日期:2026年 07月 11日

標籤: Linux Ubuntu Docker Docker-Compose Container WSL 2

摘要:C# 學習筆記


應用所需:1. 已安裝 Windows 的 Docker Desktop (Use WSL 2 instead of Hyper-V)
     2. 已安裝 Hyper-V + 啟用容器
     3. Windows 10 以上作業系統
解決問題:1. 無法啟動容器,並且出現 bind: An attempt was made to access a socket in a way forbidden by its access permissions. 說明如何解決
     2. 如何徹底解決此問題
基本介紹:本篇分為三大部分。
第一部分:問題描述
第二部分:解決方案
第三部分:徹底解決方案






第一部分:問題描述

Step 1:問題描述

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 動態保留了




第二部分:解決方案

Step 1:解決 - Windows Hyper-V / WSL2 排除範圍鎖死問題

開啟 Windows command Line ,輸入以下指令,檢查輸出的清單中,8188 是否落在某個保留範圍之內。

netsh interface ipv4 show excludedportrange protocol=tcp


執行後可以觀察到當前確實被 8178 - 8277 占用


Step 2:重啟微軟的 NAT 服務

最快的解決方案是重啟 NET 服務,來重置保留區

net stop hns
net start hns




Step 3:解決問題 - 啟動容器恢復正常

再回到 Docker Desktop 啟動使用 PORT:8188 的容器,可以觀察到已恢復正常


再次輸入以下指令做驗證,可觀察到使用的 PORT 這次沒有被配置到 8188

netsh interface ipv4 show excludedportrange protocol=tcp






第三部分:徹底解決方案

Step 1:註冊 8188 Port號

雖然重啟服務很有用,但難保哪天 Windows 重啟後又「抽籤」抽到
輸入以下指令,可以手動把 8188 註冊為 「Docker 專用」 的保留區。

netsh int ipv4 add excludedportrange protocol=tcp startport=8188 numberofports=1 store=persistent



Step 2:補充注意事項

雖然此方法可以徹底根除 Port 號不被 Docker 的 WSL 動態配置到,但其他「一般的 Windows 程式」將無法使用這個 Port。
未來若容器即使移除了, 未來也無法給一般的 Windows 應用程式使用此 Port 號

因此之後確定 WSL 不使用了此容器 Port 號,建議再輸入註銷註冊,讓此 Port 號釋放給 Windows 使用

netsh int ipv4 delete excludedportrange protocol=tcp startport=8188 numberofports=1 store=persistent