檢視容器日誌
`docker logs` 命令顯示正在執行的容器記錄的資訊。`docker service logs` 命令顯示參與服務的所有容器記錄的資訊。記錄的資訊和日誌的格式幾乎完全取決於容器的 endpoint 命令。
預設情況下,`docker logs` 或 `docker service logs` 顯示命令的輸出,就像您在終端中互動式執行命令時那樣。Unix 和 Linux 命令通常在執行時開啟三個 I/O 流,稱為 `STDIN`、`STDOUT` 和 `STDERR`。`STDIN` 是命令的輸入流,可能包括來自鍵盤的輸入或來自另一個命令的輸入。`STDOUT` 通常是命令的正常輸出,而 `STDERR` 通常用於輸出錯誤訊息。預設情況下,`docker logs` 顯示命令的 `STDOUT` 和 `STDERR`。要詳細瞭解 I/O 和 Linux,請參閱 Linux Documentation Project 關於 I/O 重定向的文章。
在某些情況下,除非您採取額外步驟,否則 `docker logs` 可能不會顯示有用的資訊。
- 如果您使用將日誌傳送到檔案、外部主機、資料庫或其他日誌後端的日誌驅動程式,並且停用了“雙重日誌記錄”,則 `docker logs` 可能不會顯示有用的資訊。
- 如果您的映象執行的是非互動式程序,例如 Web 伺服器或資料庫,該應用程式可能會將其輸出傳送到日誌檔案,而不是 `STDOUT` 和 `STDERR`。
在第一種情況下,您的日誌以其他方式處理,您可以選擇不使用 `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。
後續步驟
- 配置日誌驅動程式。
- 編寫Dockerfile。