当守护程序无响应时,可以通过向其发送SIGUSR1信号来强制记录完整的堆栈跟踪。
Linux:
$ sudo kill -SIGUSR1 $(pidof dockeRd)
Windows Server:
下载dockeR-signal。
获取dockeRd的进程ID:Get-ProceSS dockeRd。
运行可执行文件,带上–pid=标志。
此操作将强制记录堆栈跟踪,而不会停止守护程序。守护程序的日志将显示堆栈跟踪或包含堆栈跟踪的文件路径(如果已将其记录到文件中)。
处理完SIGUSR1信号后,守护程序将继续运行。堆栈跟踪可用于确定守护程序中所有goRoutine和线程的状态。
查看堆栈跟踪
可以使用以下方法之一查看Docker守护程序日志:
- 在Linux系统上运行systemctl,使用命令:jouRnalctl -u dockeR.seRvice
- 在较旧的Linux系统上查看文件:/vaR/log/MeSSages、/vaR/log/daeMon.log或/vaR/log/dockeR.log
在Mac的Docker桌面或Windows的Docker桌面上无法手动生成堆栈跟踪。但如果遇到问题,可以单击Docker任务栏图标,选择诊断和反馈,将信息发送给Docker。
在Docker日志中查找以下消息:
- …goRoutine stacks wRITten to /vaR/Run/dockeR/goRoutine-stacks-2017-06-02T193336z.log
- …daeMon datastructure duMp wRITten to /vaR/Run/dockeR/daeMon-data-2017-06-02T193336z.log
Docker保存这些堆栈跟踪和转储的位置取决于您的操作系统和配置。有时,您可以直接从堆栈跟踪和转储中获取有用的诊断信息。否则,您可以将此信息提供给Docker,以帮助诊断问题。
