執行指令:
docker run -d -p 8080:80 --name my-running-site your-app-name
錯誤訊息
docker: Error response from daemon: failed to set up container networking: driver failed programming external connectivity on endpoint my-running-site (bb1a1892c3dfbef2c9bb5ae4c4e91b3f432329958d26109e27d4ad5d6e2c4d20): Bind for 0.0.0.0:8080 failed: port is already allocated
實際上就是被 docker 占用, 但奇怪的是在 docker desktop 並沒有顯示該 image 在 running.
這個錯誤訊息代表主機上的 8080 連接埠已經被其他程式佔用了。Docker 無法將容器的 80 連接埠映射到一個正在使用中的主機連接埠,所以導致啟動失敗。
要解決這個問題,最快的方法是換一個主機連接埠來執行。你可以將指令中的 8080 改成其他數字,例如 8081 或 9000。請參考下方的修改範例:
Bash
docker run -d -p 8081:80 --name my-running-site-2 policy-app-node
如果你一定要使用 8080 連接埠,就必須先找出並停止目前正在佔用該位置的程式。在 Linux 或 macOS 系統,你可以使用以下指令查詢:
Bash
sudo lsof -i :8080
如果是 Windows 系統,則可以使用:
PowerShell
netstat -ano | findstr :8080
找出佔用的程序 ID 後將其關閉,或者如果是舊的 Docker 容器在佔用,請先執行 docker rm -f my-running-site 刪除舊容器,再重新執行原本的指令。

netstat -ano | findstr :8080
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 14100
TCP [::]:8080 [::]:0 LISTENING 14100
TCP [::1]:8080 [::]:0 LISTENING 25212
根據你的查詢結果,目前有兩個不同的程序 ID (PID) 正在佔用 8080 連接埠,分別是 14100 和 25212。這就是為什麼你的 Docker 指令會失敗。
你可以直接在命令提示字元 (CMD) 使用 taskkill 指令來強制關閉這些佔用連接埠的程式。請依照順序執行以下指令:
DOS
taskkill /F /PID 14100
taskkill /F /PID 25212
參數 /F 代表強制執行,/PID 後面則是對應你剛才查到的編號。
執行完畢後,建議再次執行 netstat -ano | findstr :8080 確認清單已經變空。只要沒有任何回傳內容,就代表連接埠已經釋放,這時你就可以重新執行原本的 Docker 指令了。
如果你想知道這些 PID 具體是什麼軟體,可以在工作管理員的詳細資料分頁中,透過 PID 欄位找到對應的應用程式名稱。
