iT邦幫忙

2025 iThome 鐵人賽

DAY 18
0

當我們的應用程式在 Docker 容器中運行時,如果遇到問題,該如何快速排查?今天將介紹幾個 Docker 內建的指令,它們是我們在問題排查時不可或缺的好幫手。

docker ps:查看容器狀態

這是最基本也最常用的指令,用於列出目前正在運行的容器。

docker ps

加上 -a 參數可以看到所有容器,包含已經停止的:

docker ps -a

從輸出結果中,我們可以快速掌握容器的 ID、使用的映像檔、運行狀態、以及對應的連接埠等關鍵資訊。

docker logs:檢視容器日誌

應用程式的日誌是排查問題最重要的線索。docker logs 可以幫助我們查看容器內應用程式的標準輸出。

# 顯示指定容器的所有日誌
docker logs <container_id_or_name>

# 持續追蹤新產生的日誌 (-f, --follow)
docker logs -f <container_id_or_name>

# 搭配 grep 過濾關鍵字,並將結果存檔
docker logs <container_id_or_name> | grep "ERROR" > error_logs.txt

docker inspect:取得容器詳細資訊

如果需要更深入的資訊,例如容器的 IP 位址、網路設定、掛載的儲存空間等,docker inspect 會是你的好幫手。

# 取得容器所有詳細資訊 (JSON 格式)
docker inspect <container_id_or_name>

# 取得容器 IP 位址
CONTAINER_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container_id_or_name>)
echo $CONTAINER_IP

# 直接用 curl 測試容器內的服務
curl http://$CONTAINER_IP:<port>

docker exec:進入容器內部互動

有時候,我們需要直接進入容器內部環境進行檢查,例如查看檔案、測試網路連線等。docker exec 可以讓我們在一個運行中的容器內執行指令。

# 進入容器的互動式 shell 環境
docker exec -it <container_id_or_name> /bin/bash
# 如果 /bin/bash 不存在,可以嘗試 /bin/sh
  • -i (--interactive): 保持標準輸入開啟。
  • -t (--tty): 分配一個虛擬終端機。

docker exec 執行的是一個新的程序,並不會影響到 Dockerfile 中由 CMDENTRYPOINT 啟動的主程序,因此非常適合用來進行線上偵錯。

總結

今天介紹的 ps, logs, inspect, exec 是 Docker 問題排查的四大法寶。熟悉它們的用法,將能幫助我們在遇到問題時,更從容地定位並解決問題。


上一篇
DayDocker Compose 指令大解密:該用 docker compose 還是 docker-compose?
下一篇
Day19-什麼時候要用docker-compose呢?
系列文
開發環境設定指南及工具分享24
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言