Docker 排查先分清楚 image、container、volume 與 network。容器顯示 Up 不代表應用健康;要一起看 health status、log、監聽 port 與實際 HTTP 回應。
查看與啟動容器
查看執行中容器Docker
docker ps顯示名稱、image、狀態與 port mapping。
查看所有容器Docker
docker ps -a包含已停止與失敗退出的容器。
自訂列表欄位Docker
docker ps --format 'table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}'適合日常巡檢。
背景啟動 Web 容器Docker
docker run -d --name web-test -p 127.0.0.1:8080:80 nginx:stable只綁 localhost,避免測試服務直接對外。
自動移除的一次性容器Docker
docker run --rm alpine:3.20 uname -a執行結束就刪 container;image 仍保留。
傳入唯讀環境檔Docker
docker run --rm --env-file .env.example myapp:1.2.3環境檔可能含秘密,檔案權限與版本庫排除要處理。
停止容器Docker
docker stop --time 30 web-test先給應用 30 秒優雅停止,再決定後續。
重新啟動容器Docker
docker restart --time 30 web-test重啟前先抓 log 與 inspect,避免線索消失。
Log、程序與容器內檢查
看最近 100 行 logDocker
docker logs --tail 100 web-teststdout/stderr 是否完整取決於應用寫 log 方式。
持續追 logDocker
docker logs -f --since 10m web-test按 Ctrl+C 只停止追蹤,不會停容器。
顯示時間戳Docker
docker logs --timestamps --tail 100 web-test注意容器與主機時區可能不同。
查看容器內程序Docker
docker top web-test不需容器內安裝 ps。
在容器內執行 shellDocker
docker exec -it web-test shimage 不一定有 bash;正式環境不要直接手改容器檔案。
在容器內執行唯讀檢查Docker
docker exec web-test nginx -T輸出可能含路徑與設定,分享前檢查。
從容器複製檔案Docker
docker cp web-test:/var/log/app/error.log .\error.log來源路徑需存在;檔案可能含敏感資料。
複製檔案進測試容器Docker
docker cp .\test.conf web-test:/tmp/test.conf只放 /tmp,避免直接覆寫正式設定。
Inspect、資源與映像
查看容器完整 metadataDocker
docker inspect web-test可能含環境變數與秘密,勿整份公開。
只看 IP 位址Docker
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' web-test多 network 時會輸出多個值。
查看健康狀態Docker
docker inspect -f '{{json .State.Health}}' web-testimage 沒定義 HEALTHCHECK 時不會有狀態。
即時資源用量Docker
docker stats --no-stream短時間快照不代表尖峰,需搭配監控。
查看容器檔案變更Docker
docker diff web-testA/C/D 代表新增、變更、刪除;不適合當持久化方式。
查看 imagesDocker
docker image lstag 可移動,正式部署最好鎖定版本或 digest。
查看 image 歷史Docker
docker image history --no-trunc myapp:1.2.3history 可能暴露 build command;秘密不應進 layer。
拉指定版本 imageDocker
docker pull nginx:1.26.2避免正式環境只用 latest。
查看 volumeDocker
docker volume lsunused 不等於可刪,先查掛載與備份。
查看 networkDocker
docker network lsbridge、host、overlay 行為不同。
查看單一 networkDocker
docker network inspect bridge可看到 subnet、gateway 與連接容器。
怎麼確認有做對
- 用 inspect 確認 image、mount、network、restart policy 與 health。
- 從主機實際 curl 映射 port,不只看 docker ps。
- 重建前確認 volume 有備份並做過還原測試。
常見錯誤
- 把容器內手改當正式修復,重建後全部消失。
- 使用 latest 而沒有版本或 digest。
- 看到 Up 就認定服務健康。
- 清理 volume 前沒確認資料與備份。
版本與官方文件
參數會隨工具版本與作業系統實作改變。正式環境先用 --help、-h 或系統內建說明確認,再以當版官方文件為準。