1.通过命令查看docker启动失败的原因

豆包给出的指令:sudo journalctl -u docker.service

gpt给出的指令:sudo journalctl -u docker --no-pager | tail -n 100

还是gpt给力一点

把日志发给gpt进行分析 发现是containerd的问题

当我执行

sudo systemctl status containerd

发现containerd的状态是运行失败的

执行
 

sudo journalctl -u containerd.service -n 50 --no-pager

将日志发给gpt进行分析

发现关键错误是:

panic: invalid page type: 24: 10

这表明 containerd 在访问其元数据库(基于 bbolt 键值存储)时遇到了损坏或不一致的问题。错误发生在 metadata.scanRoots 函数中,可能是由于断电导致数据库文件(通常位于 /var/lib/containerd/io.containerd.metadata.v1.bolt)损坏。

解决步骤:

在修复之前,备份 containerd 数据目录以防止数据丢失:

sudo cp -r /var/lib/containerd /var/lib/containerd.bak

删除损坏的数据库文件:

sudo rm -f /var/lib/containerd/io.containerd.metadata.v1.bolt

但是当我执行删除命令时  提示我删除的不是文件 而是一个目录

rm: cannot remove '/var/lib/containerd/io.containerd.metadata.v1.bolt': Is a directory

通过命令:

ls -l /var/lib/containerd/io.containerd.metadata.v1.bolt

发现该目录下只有一个文件:
 

-rw-r--r-- 1 root root 524288 May  5 20:21 meta.db

由于之前已经备份过文件 这次直接删除文件即可
 

sudo rm -f /var/lib/containerd/io.containerd.metadata.v1.bolt/meta.db

然后通过命令:

sudo systemctl status containerd

看到该服务已经是running状态

这时候去启动docker  发现仍然启动失败

同样 我们用一样的命令去查询docker启动失败的日志:

sudo journalctl -u docker -n 100 --no-pager

当把日志提供给gpt后  提示我们关键错误信息:

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x1c pc=0x55cdeeab7455]
goroutine 1 [running, locked to thread]:
github.com/docker/docker/libnetwork.(*endpointCnt).EndpointCnt(0xc000e6e7e0?)
        /root/build-deb/engine/libnetwork/endpoint_cnt.go:101 +0x35

Docker 在初始化网络配置(configureNetworking)时崩溃

判断原因是:
数据目录损坏:/var/lib/docker 中的网络配置(通常存储在 network 子目录或键值存储中)因断电而损坏,导致 Docker 无法正确加载网络信息。

残留状态:断电可能导致 Docker 的网络状态或锁文件异常,触发了崩溃。

只能清理这些文件了

先停止之前的服务:
 

sudo systemctl stop containerd

删除

sudo rm -rf /var/lib/docker/network

然后依次启动:

sudo systemctl start containerd
sudo systemctl start docker

这时候已经能正常启动docker了

然而我的容器仍然有部分启动  我通过单个启动时提示缺少example_default网络

应该是之前配置了网络

首先创建:

sudo docker network create example_default

然后连接
 

sudo docker network connect example_default f0f4a633a35b

至此  已经都能正常启动了

解决完成 感谢gpt  告辞

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐