admin管理员组

文章数量:1550692

群晖运行Nextcloud容器被我一个误操作导致了崩溃,再次点击启动容器出现报错内容,“failed to initialize logging driver: database is locked”。经过冷静的分析,解决了该问题,下面记录一下解决方法。

报错内容

重新启动容器提示查看docker日志信息,点开日志信息出现报错内容。
分析:初步判断是容器的数据库由于冲突被锁住了,只能进入终端来解决问题。

进入ssh远程终端后,尝试用指令拉起docker容器,也出现报错。
分析:确实无法开启容器了,报错内容也确实是数据库被锁。不过为什么一直提示的是logging的数据库,难道是容器的日志数据库出现了问题?

尝试查看这个容器的日志,发现无法查看。看来问题很明显了。

网上搜到的解决方法

某度上搜了一圈,都没有这个问题的相关词条,只能上google搜一下。谷歌上确实搜到了相关的词条,但是仔细看完,我不理解却大受震撼。截取某个回答如下。

这个问题的提问者最后找到了解决方案,而方案居然是"clean the container data"——清除容器数据。而且不止一个网站转发了这个解决方法。无奈我只能自己想法子了。

解决方法

我尝试先找到这个容器的日志数据。经过搜索,我发现了这个文章。
CSDN:《群辉Docker删除应用日志》——莫小牙阝

根据文章的这条指令,我找到了容器日志的位置

$ docker inspect --format='{{.LogPath}}' <容器ID>
echo > 返回日志路径

进入目录,对比该容器与其他容器的目录,发现多出了三个log文件。(忘了截图)
移除多出的三个文件,尝试启动容器,依旧无法启动成功。

尝试移除该容器的log.db,意外发现…容器可以启动了。

$ rm log.db

容器启动成功。

总结

该问题是由于多个终端操作容器,造成容器日志被锁。而容器的日志作为启动必须加载项,被锁造成启动失败。庆幸的是容器日志可被清空删除,删除后会重新创建。因此移除异常的日志数据库,重启容器,即可恢复正常。

本文标签: 解决办法容器Docker群晖failed