Watch at Ease看見世界,讀懂生活。

科技 · 實用指南

Docker 顯示「連接埠已分配」?變更前先證明擁有者

衝突可能屬於另一個容器、主機程序、重複 Compose 對應或守護程式狀態。先固定準確的主機 IP、協定與連接埠,再只改已驗證擁有者。

原創圖:變更前證明準確 Docker 主機 tuple 的擁有者。
原創示意圖:由請求 tuple 走向最小已驗證變更。 Watch at Ease

「連接埠已分配」只表示 Docker 無法取得一個主機 socket tuple,並未證明誰佔用,也不表示要終止所有監聽或刪除無關容器。

先寫下主機 IP、協定與連接埠,例如 0.0.0.0、TCP、8080。用同一 tuple 比對 Docker 對應與主機監聽。

固定準確 tuple 與 Docker context

保存完整錯誤,記錄 context、Compose 專案與檔案、主機 IP、主機埠、容器埠及 TCP/UDP。不要只記「8080」。

渲染有效 Compose 設定或保存 docker run,檢查重複對應、覆寫、replica 或兩個服務請求同一 tuple。

尋找全部 Docker 對應

以準確連接埠和協定執行 docker ps -a publish 篩選,再檢查容器與專案標籤。相關 context 都要查。

其他專案執行中的容器是真正擁有者;確認工作負載後才停止或改映射。

獨立證明主機監聽者

Linux 用 ss 查監聽 TCP/UDP 與程序;Windows 用 LocalPort 篩選 Get-NetTCPConnection,再比對 LocalAddress、State、OwningProcess。

將 PID 對應到服務或程式並確認用途。docker-proxy/dockerd 通常指回容器,其他程式則是主機擁有者。

分類後再修復

容器擁有者只改對應設定並重建該服務;主機程序重新設定或精確停止;重複設定則移除重複項後再渲染。

若容器與 socket 清單都空,保存日誌、版本、context、網路模式與失敗命令,把重新啟動當成有界測試。

以雙側退出測試結案

修復後重跑 Docker 對應與主機監聽。只有預期擁有者應持有準確 tuple,其他工作負載不變。

啟動服務、檢查發布對應、從預期網路位置測試地址並保存退出碼。

原創矩陣:區分 Docker 對應、主機 socket 與守護程式狀態。
原創示意圖:同一錯誤可能屬於三個擁有層。 Watch at Ease