©
本文档使用 PHP中文网手册 发布
在成功安装 Docker 并启动 Docker 之后,dockerd
守护进程将以其默认配置运行。本主题将介绍如何自定义配置,手动启动守护程序以及如果遇到问题时对守护程序进行故障排除和调试。
启动 Docker 的命令取决于您的操作系统。检查安装 Docker 下的正确页面。要将 Docker 配置为在系统引导时自动启动,请参阅将 Docker 配置为在引导时启动。
通常,您使用操作系统实用程序启动 Docker。出于调试目的,您可以使用该dockerd
命令手动启动 Docker 。您可能需要使用sudo
,具体取决于您的操作系统配置。当您以这种方式启动 Docker 时,它会在前台运行,并将其日志直接发送到您的终端。
$ dockerd INFO[0000] +job init_networkdriver()INFO[0000] +job serveapi(unix:///var/run/docker.sock)INFO[0000] Listening for HTTP on unix (/var/run/docker.sock)......
要在您手动启动 Docker 时停止 Docker,请在您的终端中发出一个Ctrl+C
。
守护进程(daemon)包含许多配置选项,您可以在手动启动 Docker 时将其作为标志传递,或者在daemon.json
配置文件中进行设置。推荐使用第二种方法,因为重新启动 Docker 时,这些配置更改仍然存在。
请参阅 dockerd 以获取完整的配置选项列表。
以下是使用一些配置选项手动启动 Docker 守护程序(daemon)的示例:
$ dockerd -D --tls=true --tlscert=/var/docker/server.pem --tlskey=/var/docker/serverkey.pem -H tcp://192.168.59.3:2376
此命令启用 debugging(-D
),启用 TLS(-tls
),指定服务器证书和密钥(--tlscert
和--tlskey
),并指定守护程序侦听连接的网络接口(-H
)。
更好的方法是将这些选项放入daemon.json
文件并重新启动 Docker。此方法适用于每个 Docker 平台。以下daemon.json
示例设置与上述命令相同的所有选项:
{ "debug": true, "tls": true, "tlscert": "/var/docker/server.pem", "tlskey": "/var/docker/serverkey.pem", "hosts": ["tcp://192.168.59.3:2376"]}
Docker 文档中会讨论许多特定的配置选项。接下来的一些地方包括:
自动启动容器
限制容器的资源
配置存储驱动程序
容器安全
您可以在守护进程上启用调试,以了解守护进程的运行时活动并帮助进行故障排除。如果守护进程完全没有响应,您还可以通过向 Docker 守护进程(daemon)发送SIGUSR
信号来强制将所有线程的完整堆栈跟踪添加到守护进程日志中。
如果您的容器尝试使用比系统可用的内存更多的内存,则可能会遇到内存异常(OOME),并且容器或 Docker 守护程序(daemon)可能会被内核 OOM 切断器所切断。要防止发生这种情况,请确保您的应用程序在具有足够内存的主机上运行,并且请参阅了解耗尽内存的风险。
守护进程(daemon)日志可以帮助您诊断问题。根据操作系统配置和使用的日志记录子系统,日志可以保存在几个位置之一中:
操作系统 | 位置 |
---|---|
RHEL, Oracle Linux | /var/log/messages |
Debian | /var/log/daemon.log |
Ubuntu 16.04+, CentOS | Use the command journalctl -u docker.service |
Ubuntu 14.10- | /var/log/upstart/docker.log |
macOS | ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/console-ring |
Windows | AppData\Local |
有两种方法来启用调试。推荐的方法是将debug
密钥设置true
在daemon.json
文件中。此方法适用于每个 Docker 平台。
1. 编辑daemon.json
通常位于/etc/docker/
的文件。如果该文件尚不存在,您可能需要创建该文件。在 macOS 或 Windows 上,请勿直接编辑文件。相反,请转到首选项 / 守护进程 / 高级。
2. 如果文件为空,请添加以下内容:
{ "debug": true }
如果该文件已经包含 JSON,只需添加该键"debug": true
,如果它不是结束括号之前的最后一行,请注意在该行的末尾添加逗号。同时验证是否log-level
已设置密钥,将其设置为info
或debug
。info
是默认的,和可能的值是debug
,info
,warn
,error
,fatal
。
3. HUP
向守护程序发送信号以使其重新加载其配置。在 Linux 主机上,使用以下命令。
$ sudo kill -SIGHUP $(pidof dockerd)
在 Windows 主机上,重新启动 Docker。您可以停止 Docker 守护进程并使用该-D
标志手动重新启动它。但是,这可能会导致 Docker 以与主机的启动脚本创建的环境不同的环境重新启动,并且这可能会使调试更加困难。强制要记录的堆栈跟踪如果守护进程没有响应,可以强制执行完整的堆栈跟踪通过向SIGUSR1
守护进程发送信号进行记录。
Linux:
$ sudo kill -SIGUSR1 $(pidof dockerd)
Windows 服务器:
下载 docker-signal。
用--pid=<PID of daemon>
标志运行可执行文件。
这将强制堆栈跟踪被记录,但不会停止守护进程(Daemon)。如果守护进程日志记录到文件中,它将显示堆栈跟踪或包含堆栈跟踪的文件的路径。
守护进程(Daemon)将在处理完SIGUSR1
信号并将堆栈跟踪转储到日志后继续运行。堆栈跟踪可用于确定守护进程内所有 goroutine 和线程的状态。
检查 Docker 是否运行的操作系统无关的方法是使用该docker info
命令询问 Docker 。
您还可以使用操作系统实用程序(例如sudo systemctl is-active docker
或sudo status docker
或sudo service docker status
),或者使用 Windows 实用程序检查服务状态。
最后,您可以dockerd
使用类似于ps
或top
的命令检入进程的进程列表。