读取守护程序日志
守护程序日志可以帮助您诊断问题。日志可以保存在以下 几个位置,具体取决于操作系统配置和日志记录 使用的子系统:
操作系统 | 位置 |
---|---|
Linux的 | 使用命令(或者读取或 ,具体取决于您的 Linux 发行版)journalctl -xu docker.service /var/log/syslog /var/log/messages |
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
tail
-f
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
启用调试
有两种方法可以启用调试。建议的方法是将 key 设置为 in the file.此方法适用于每个
Docker 平台。debug
true
daemon.json
编辑文件,该文件通常位于 .你 可能需要创建此文件(如果尚不存在)。在 macOS 或 Windows 上, 不要直接编辑文件。相反,请通过 Docker Desktop 设置编辑文件。
daemon.json
/etc/docker/
如果文件为空,请添加以下内容:
{ "debug": true }
如果文件已经包含 JSON,只需添加键 ,即 如果不是最后一行,请小心地在行尾添加逗号 在右括号之前。此外,验证如果设置了密钥, 它设置为 或 。 是默认值,并且可能 值为 、 、 、 、 。
"debug": true
log-level
info
debug
info
debug
info
warn
error
fatal
向守护程序发送信号,使其重新加载其配置。 在 Linux 主机上,使用以下命令。
HUP
$ sudo kill -SIGHUP $(pidof dockerd)
在 Windows 主机上,重启 Docker。
除了遵循此过程,您还可以停止 Docker 守护程序和
使用 debug 标志 手动重新启动它。但是,这可能会导致 Docker
使用与主机启动脚本不同的环境重新启动
create 的,这可能会使调试更加困难。-D
强制记录堆栈跟踪
如果守护程序没有响应,您可以强制
向守护程序发送信号。SIGUSR1
Linux的:
$ sudo kill -SIGUSR1 $(pidof dockerd)
Windows 服务器:
下载 docker-signal。
获取 dockerd 的进程 ID。
Get-Process dockerd
运行带有标志的可执行文件。
--pid=<PID of daemon>
这会强制记录堆栈跟踪,但不会停止守护程序。守护程序日志 显示堆栈跟踪或包含堆栈跟踪的文件的路径(如果是 logged 到一个文件。
守护进程在处理信号和转储后继续运行
堆栈跟踪到日志。堆栈跟踪可用于确定状态
守护进程内的所有 goroutine 和线程。SIGUSR1
查看堆栈跟踪
可以使用以下方法之一查看 Docker 守护程序日志:
- 通过在 Linux 系统上运行,使用
journalctl -u docker.service
systemctl
/var/log/messages
、 或更早的 Linux 系统/var/log/daemon.log
/var/log/docker.log
注意
无法在 Docker Desktop 上手动生成堆栈跟踪 Mac 或 Docker Desktop for Windows。但是,您可以单击 Docker 任务栏 图标,然后选择 Troubleshoot (疑难解答) 以将信息发送到 Docker(如果您遇到 问题。
在 Docker 日志中查找如下所示的消息:
...goroutine stacks written to /var/run/docker/goroutine-stacks-2017-06-02T193336z.log
Docker 保存这些堆栈跟踪和转储的位置取决于您的 操作系统和配置。您有时可以获得有用的诊断 信息直接来自堆栈跟踪和转储。否则,您可以提供 此信息发送给 Docker 以帮助诊断问题。