讀取守護程序日誌
守護程序日誌可以幫助您診斷問題。根據作業系統配置和使用的日誌記錄子系統,日誌可能儲存在幾個位置之一
作業系統 | 位置 |
---|---|
Linux | 使用命令 journalctl -xu docker.service (或讀取 /var/log/syslog 或 /var/log/messages ,具體取決於您的 Linux 發行版) |
macOS (dockerd 日誌) | ~/Library/Containers/com.docker.docker/Data/log/vm/dockerd.log |
macOS (containerd 日誌) | ~/Library/Containers/com.docker.docker/Data/log/vm/containerd.log |
Windows (WSL2) (dockerd 日誌) | %LOCALAPPDATA%\Docker\log\vm\dockerd.log |
Windows (WSL2) (containerd 日誌) | %LOCALAPPDATA%\Docker\log\vm\containerd.log |
Windows (Windows 容器) | 日誌位於 Windows 事件日誌中 |
要檢視 macOS 上的 dockerd
日誌,請開啟一個終端視窗,並使用帶 -f
標誌的 tail
命令來“跟蹤”日誌。日誌將一直列印,直到您使用 CTRL+c
終止命令
$ tail -f ~/Library/Containers/com.docker.docker/Data/log/vm/dockerd.log
2021-07-28T10:21:21Z dockerd time="2021-07-28T10:21:21.497642089Z" level=debug msg="attach: stdout: begin"
2021-07-28T10:21:21Z dockerd time="2021-07-28T10:21:21.497714291Z" level=debug msg="attach: stderr: begin"
2021-07-28T10:21:21Z dockerd time="2021-07-28T10:21:21.499798390Z" level=debug msg="Calling POST /v1.41/containers/35fc5ec0ffe1ad492d0a4fbf51fd6286a087b89d4dd66367fa3b7aec70b46a40/wait?condition=removed"
2021-07-28T10:21:21Z dockerd time="2021-07-28T10:21:21.518403686Z" level=debug msg="Calling GET /v1.41/containers/35fc5ec0ffe1ad492d0a4fbf51fd6286a087b89d4dd66367fa3b7aec70b46a40/json"
2021-07-28T10:21:21Z dockerd time="2021-07-28T10:21:21.527074928Z" level=debug msg="Calling POST /v1.41/containers/35fc5ec0ffe1ad492d0a4fbf51fd6286a087b89d4dd66367fa3b7aec70b46a40/start"
2021-07-28T10:21:21Z dockerd time="2021-07-28T10:21:21.528203579Z" level=debug msg="container mounted via layerStore: &{/var/lib/docker/overlay2/6e76ffecede030507fcaa576404e141e5f87fc4d7e1760e9ce5b52acb24
...
^C
啟用除錯
有兩種方法可以啟用除錯。推薦的方法是在 daemon.json
檔案中將 debug
鍵設定為 true
。此方法適用於所有 Docker 平臺。
編輯
daemon.json
檔案,該檔案通常位於/etc/docker/
。如果此檔案尚不存在,您可能需要建立它。在 macOS 或 Windows 上,不要直接編輯該檔案。而是透過 Docker Desktop 設定來編輯檔案。如果檔案為空,請新增以下內容
{ "debug": true }
如果檔案已包含 JSON,只需新增鍵
"debug": true
,注意如果它不是右花括號前的最後一行,則在該行末尾新增一個逗號。還要驗證如果設定了log-level
鍵,它被設定為info
或debug
。info
是預設值,可能的值是debug
、info
、warn
、error
、fatal
。向守護程序傳送一個
HUP
訊號,使其重新載入配置。在 Linux 主機上,使用以下命令。$ sudo kill -SIGHUP $(pidof dockerd)
在 Windows 主機上,重新啟動 Docker。
除了遵循此過程,您還可以停止 Docker 守護程序並使用除錯標誌 -D
手動重新啟動它。但是,這可能會導致 Docker 使用與主機啟動指令碼建立的環境不同的環境重新啟動,這可能會使除錯更加困難。
強制記錄堆疊跟蹤
如果守護程序無響應,您可以透過向守護程序傳送 SIGUSR1
訊號來強制記錄完整的堆疊跟蹤。
Linux:
$ sudo kill -SIGUSR1 $(pidof dockerd)
Windows Server:
下載 docker-signal。
獲取 dockerd 的程序 ID
Get-Process dockerd
。使用標誌
--pid=<守護程序的PID>
執行可執行檔案。
這會強制記錄堆疊跟蹤,但不會停止守護程序。守護程序日誌會顯示堆疊跟蹤,或者如果堆疊跟蹤被記錄到檔案中,則顯示包含堆疊跟蹤的檔案的路徑。
守護程序在處理 SIGUSR1
訊號並將堆疊跟蹤轉儲到日誌後繼續執行。堆疊跟蹤可用於確定守護程序內所有 goroutine 和執行緒的狀態。
檢視堆疊跟蹤
Docker 守護程序日誌可以透過以下方法之一檢視
- 在 使用
systemctl
的 Linux 系統上執行journalctl -u docker.service
- 在較舊的 Linux 系統上檢視
/var/log/messages
、/var/log/daemon.log
或/var/log/docker.log
注意無法在 Docker Desktop for Mac 或 Docker Desktop for Windows 上手動生成堆疊跟蹤。但是,如果您遇到問題,可以單擊 Docker 工作列圖示並選擇 Troubleshoot (故障排除) 將資訊傳送給 Docker。
在 Docker 日誌中查詢類似以下的訊息
...goroutine stacks written to /var/run/docker/goroutine-stacks-2017-06-02T193336z.log
Docker 儲存這些堆疊跟蹤和轉儲的位置取決於您的作業系統和配置。有時您可以直接從堆疊跟蹤和轉儲中獲取有用的診斷資訊。否則,您可以將此資訊提供給 Docker 以幫助診斷問題。