Docker 启动失败 no such device storage-driver=overlay2
内容提要
在k8s集群中,有几个pod的状态不正常,原因是docker没有正常启动。排查步骤包括检查内核模块、设备、磁盘空间、权限、内核版本、配置文件等。如果问题仍未解决,可以尝试使用其他存储驱动程序或更新Docker版本。同时,还可以查看系统日志以获取更多信息。
延伸解读
内核版本变化导致驱动丢失
文章指出,故障机器与正常节点对比后,发现底层ECS有过操作,重启后内核版本发生变化,导致overlay驱动丢失。这提示在云环境中,底层运维操作可能间接影响节点内核模块的可用性,进而导致Docker存储驱动失效。排查时除了检查Docker自身配置,也应关注节点近期是否发生过重启或底层变更。
overlay2依赖内核模块,需优先确认
Docker使用overlay2存储驱动时,依赖内核的overlay模块。文章给出的排查步骤中,首先建议用lsmod | grep overlay确认模块是否加载,并用modinfo overlay检查模块文件是否存在。若未加载,可尝试modprobe overlay手动加载。这说明在遇到“no such device”报错时,应优先确认内核模块状态,而非直接调整Docker配置。
排查需覆盖权限、磁盘与配置
除了内核模块,文章还列出磁盘空间、权限、内核版本兼容性以及Docker配置文件等检查点。例如确保/var/lib/docker有足够空间,Docker进程有权限访问相关设备,并确认/etc/docker/daemon.json中storage-driver设置为overlay2。这些步骤有助于排除其他常见诱因,避免只关注单一方向。
日志与启动记录是定位关键
文章强调通过系统日志和启动记录来定位问题,例如使用journalctl -b --list-boots查看启动日志,用journalctl -u docker查看Docker日志,以及检查/var/log/下的系统报错。结合kubelet启动失败和Docker存储驱动报错,可以更快锁定故障时间点与根本原因,为后续修复提供依据。
Q&A
Docker 启动失败的常见原因是什么?
Docker 启动失败的常见原因包括存储驱动问题、内核模块未加载、磁盘空间不足和权限不足等。
如何检查Docker的存储驱动配置?
可以查看Docker配置文件 /etc/docker/daemon.json 中的 storage-driver 设置,确保其为 overlay2。
如果Docker无法启动,应该如何排查?
排查步骤包括检查内核模块、设备、磁盘空间、权限、内核版本和配置文件等。
如何确认overlay2存储驱动所需的内核模块已加载?
使用命令 lsmod | grep overlay 查看已加载的模块,确保 overlay 模块存在。
如何解决Docker存储驱动不支持的问题?
可以尝试手动加载overlay模块,检查设备挂载情况,或更新Docker版本。
如何查看Docker的启动日志以获取更多信息?
可以使用命令 journalctl -u docker 查看Docker的启动日志,或检查 /var/log/ 目录下的相关日志。