對 Docker 容器進行有效監控對於確保應用程式的穩定性和流暢運作至關重要。 Docker 日誌發揮關鍵作用,它能夠提供容器內部運行狀況的洞察,幫助您更有效率地追蹤效能、發現錯誤並解決問題。本指南將全面介紹如何檢索和解讀 Docker 日誌,使您掌握解決常見容器問題所需的知識。
了解 Docker 日誌
Docker 日誌詳細記錄了正在執行的 Docker 容器內發生的所有活動。這包括標準輸出 (stdout) 和標準錯誤訊息 (stderr),使您能夠監控容器的效能並診斷潛在問題。
預設情況下,Docker 日誌以 JSON 檔案的形式儲存在主機系統的「/var/lib/docker/containers」目錄下。每個容器都會產生自己的日誌文件,格式為「[container_id]-json.log」。您可以直接存取這些日誌,也可以docker logs在終端機中使用命令輕鬆查看。
這些日誌中包含重要的應用程式訊息、警告和錯誤詳情,有助於進行故障排除。它們還可能提供系統相關訊息,例如啟動事件和資源使用指標。
為了更好地管理日誌,Docker 使用了日誌驅動程式。日誌驅動程式決定了日誌的儲存或傳輸方式和位置。預設的日誌驅動程式json-file將日誌以 JSON 格式捕獲到本機電腦上,但您可以選擇其他驅動程式將日誌轉送到外部系統,以便更好地進行管理和分析。
存取 Docker 日誌
若要查看使用「json-file」或 journald 日誌驅動程式的正在執行的容器的日誌,您可以執行下列命令:
docker logs [OPTIONS] CONTAINER_NAME_OR_ID
請將 `<container_name> ` 替換CONTAINER_NAME_OR_ID為目標容器的對應名稱或 ID。若要取得所有正在運行的容器列表,請使用下列命令:
docker ps
此指令會顯示活動容器及其各自的 ID、名稱、狀態和其他相關資訊。

例如,如果 Docker 運行了兩個名為openwebui和ollama 的容器,要存取openwebui容器的日誌,您可以執行以下操作:
docker logs openwebui

您也可以使用容器 ID 代替名稱來查看日誌,如下所示:
docker logs 1f351684ae30

Docker 日誌選項和標誌
此docker logs命令支援多種選項來自訂日誌顯示。以下是一些常用參數:
| 選項 | 描述 | 範例命令 |
|---|---|---|
| -細節 | 在日誌中顯示更多詳細資訊。 | docker logs –details container_name |
| –關注,-f | 即時持續顯示新的日誌條目。 | docker logs -f container_name |
| -自從 | 顯示設定的時間或持續時間後產生的日誌(例如,2024-07-08T13:42:13Z 或 10 分鐘)。 | docker logs –since 10m container_name |
| –tail,-n | 顯示日誌末尾指定數量的行。 | docker logs –tail 50 container_name |
| –時間戳,-t | 為每個日誌條目新增時間戳記。 | docker logs -t container_name |
| -直到 | 顯示指定時間之前產生的日誌。 | docker logs –until 2024-07-08T14:00:00Z container_name |
例如,若要查看特定容器的最後 50 個日誌條目,您可以執行下列命令:
docker logs --tail 50 openwebui

同樣,您還可以採用其他選項,例如--follow即時更新日誌或--since按時間篩選日誌條目。
將 Docker 日誌儲存到文件
若要將 Docker 日誌儲存到文字文件,可以使用重定向運算子或可用的命令選項。例如,以下命令會將指定容器的日誌儲存到「container_logs.txt」:
docker logs container_name > container_logs.txt

之後您可以使用任何文字編輯器(例如記事本、Visual Studio Code 或 nano)存取此檔案以查看已儲存的日誌。

在 Docker Compose 中查看日誌
若要存取由 Docker Compose 管理的容器的日誌,請使用以下docker compose logs命令。若要查看 Compose 專案中所有容器的日誌,請執行:
docker compose logs
如果您想查看特定服務的日誌,請將服務名稱附加到命令中:
docker compose logs service_name
Docker 日誌管理技巧
Docker 使用日誌驅動程式來擷取和儲存容器的輸出。預設的json-file驅動程式會將日誌以 JSON 格式儲存在主機上。您可以選擇切換到其他驅動程序,將日誌傳送到外部服務,以便更好地控制日誌管理。
Docker 提供兩種日誌傳輸模式。阻塞模式會立即傳輸日誌,但可能會略微影響效能。相反,非阻塞模式會在轉發日誌之前將其暫時保存在記憶體中,這可以最大限度地減少延遲,但如果記憶體已滿,則存在日誌遺失的風險。
為了提高靈活性,可以考慮在應用程式內部管理日誌。但是,鑑於容器資料具有短暫性,建議將日誌儲存在持久性儲存中,或將其轉發到外部日誌管理服務。
使用 Docker 磁碟區是保護日誌的可靠方法。磁碟區將資料直接保存在主機上,即使在容器停止或重新啟動期間也能確保資料可用性,因此與綁定掛載相比,磁碟區更適合長期儲存。
另一種有效的策略是使用專用的日誌容器。這種專用容器可以收集和管理來自各個容器的日誌,並將它們路由到集中式系統,從而保持主應用程式容器的輕量級和易於管理。
結論
總之,Docker 日誌對於監控容器效能和快速解決問題至關重要。透過使用類似 `docker log` 的命令docker logs並遵循最佳實踐(包括持久化儲存和高效的日誌驅動程式),您可以維護可靠的日誌管理。一個組織良好的日誌框架將有助於保持容器的穩定性並確保應用程式高效運行。為了增強日誌監控和分析能力,您可以考慮整合 ELK Stack、Fluentd、Prometheus 和 Grafana 等工具。
發佈留言