Docker 启动失败 no such device storage-driver=overlay2

💡 原文中文,约1800字,阅读约需5分钟。
📝

内容提要

在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/ 目录下的相关日志。

🏷️

标签

➡️

继续阅读