檢視容器日誌
docker logs
命令顯示正在執行的容器所記錄的資訊。docker service logs
命令顯示參與服務的所有容器所記錄的資訊。記錄的資訊及其格式幾乎完全取決於容器的端點命令。
預設情況下,docker logs
或 docker service logs
顯示命令的輸出,就像您在終端中以互動方式執行該命令時一樣。Unix 和 Linux 命令在執行時通常會開啟三個 I/O 流,分別稱為 STDIN
、STDOUT
和 STDERR
。STDIN
是命令的輸入流,可能包括來自鍵盤的輸入或來自另一個命令的輸入。STDOUT
通常是命令的正常輸出,而 STDERR
通常用於輸出錯誤訊息。預設情況下,docker logs
顯示命令的 STDOUT
和 STDERR
。要了解有關 I/O 和 Linux 的更多資訊,請參閱Linux 文件專案中關於 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。