檢視容器日誌

docker logs 命令顯示正在執行的容器所記錄的資訊。docker service logs 命令顯示參與服務的所有容器所記錄的資訊。記錄的資訊及其格式幾乎完全取決於容器的端點命令。

預設情況下,docker logsdocker service logs 顯示命令的輸出,就像您在終端中以互動方式執行該命令時一樣。Unix 和 Linux 命令在執行時通常會開啟三個 I/O 流,分別稱為 STDINSTDOUTSTDERRSTDIN 是命令的輸入流,可能包括來自鍵盤的輸入或來自另一個命令的輸入。STDOUT 通常是命令的正常輸出,而 STDERR 通常用於輸出錯誤訊息。預設情況下,docker logs 顯示命令的 STDOUTSTDERR。要了解有關 I/O 和 Linux 的更多資訊,請參閱Linux 文件專案中關於 I/O 重定向的文章

在某些情況下,除非您採取額外的步驟,否則 docker logs 可能不會顯示有用的資訊。

  • 如果您使用日誌驅動程式將日誌傳送到檔案、外部主機、資料庫或其他日誌後端,並且停用了“雙重日誌記錄”,則 docker logs 可能不會顯示有用的資訊。
  • 如果您的映象執行的是非互動式程序(例如 Web 伺服器或資料庫),該應用程式可能會將其輸出傳送到日誌檔案,而不是 STDOUTSTDERR

在第一種情況下,您的日誌會以其他方式處理,您可能會選擇不使用 docker logs。在第二種情況下,官方 nginx 映象展示了一種解決方法,而官方 Apache httpd 映象則展示了另一種。

官方 nginx 映象建立了一個從 /var/log/nginx/access.log/dev/stdout 的符號連結,並建立了另一個從 /var/log/nginx/error.log/dev/stderr 的符號連結,從而覆蓋日誌檔案並導致日誌被髮送到相關的特殊裝置。請參閱 Dockerfile

官方 httpd 驅動程式更改了 httpd 應用程式的配置,以將其正常輸出直接寫入 /proc/self/fd/1 (即 STDOUT),並將其錯誤寫入 /proc/self/fd/2 (即 STDERR)。請參閱 Dockerfile

後續步驟