Docker守护程序将所有相关数据存储在一个特定目录中,该目录用于跟踪所有与Docker相关的内容,包括容器、映像、卷、服务定义和机密信息。
在默认情况下,该目录位置为:
/var/lib/docker(适用于Linux系统)。
C:ProgramDatadocker(适用于Windows系统)。
您可以通过data-Root配置选项来更改Docker守护程序的目录设置。
由于Docker守护程序的状态信息保存在此目录中,因此建议为每个守护程序使用独立的目录。如果多个守护程序共享同一目录,可能会导致难以排查的错误。
故障排除守护程序
可以在守护程序上启用调试模式,以监控其运行时活动并协助故障排除。如果守护程序没有响应,您可以通过发送SIGUSR信号给Docker守护程序,强制其在日志中记录所有线程的完整堆栈跟踪。
解决Daemon.json与启动脚本之间的冲突
如果您同时使用Daemon.json文件并通过dockerd命令或启动脚本手动传递选项,且这些选项产生冲突,Docker将无法启动,可能会出现如下错误:

若看到类似错误信息,并且您是通过标志手动启动守护程序,可能需要调整标志或Daemon.json以消除冲突。
如果您希望通过操作系统的init脚本启动Docker,可能需要按照操作系统的特定要求覆盖这些脚本中的默认设置。
在Daemon.json中与systemD结合使用hosts键
一个常见的配置冲突示例是希望指定一个不同于默认值的守护程序地址。Docker默认通过套接字进行监听。在Debian和Ubuntu系统上使用systemd时,这意味着在启动dockerd时始终使用-H主机标志。如果在Daemon.json中指定了hosts条目,可能会导致配置冲突,从而导致Docker无法启动。
为了解决这个问题,您可以创建一个新的文件/etc/systemd/system/docker.service.d/docker.conf,内容如下,以删除在默认启动守护程序时使用的-H参数。
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd
有时,您可能需要配置systemd以便与Docker一起使用,例如设置HTTP或HTTPS代理。
在尝试启动Docker之前,请运行sudo systemctl daemon-reload。如果Docker成功启动,它将根据Daemon.json中的hosts键而不是套接字指定的IP地址进行监听。
