群晖 Docker 容器启动失败:database is locked 解决办法
0x01 故障现象
在群晖(Synology)环境,尝试启动一个 Docker 容器时,命令行或 Container Manager 弹出如下报错,导致容器完全无法启动:
Error response from daemon: failed to create task for container: failed to initialize logging driver: database is locked
Error: failed to start containers: XXXX
0x02 解决过程
从报错信息 failed to initialize logging driver: database is locked 可以明确看出,是 Docker 的日志驱动在初始化时,发现底层 SQLite 数据库被锁死了。
解决思路非常简单粗暴:直接找出并干掉这个被锁死的日志数据库文件,让 Docker 重新生成一个干净的即可。
具体操作步骤如下(需要 SSH 登录到群晖并切换到 root 权限):
# 1、查找故障容器的日志文件路径, 利用 docker inspect 提取该容器的 LogPath,我这边容器名称是blog-pro-php
root@SA6400:~# docker inspect --format='{{.LogPath}}' blog-pro-php
/volume1/@docker/containers/ade3d41604b8fb9b129ecc238df250a4f676463a6d6aaf2fc8c57d8b99f9403e/log.db
# 2、物理删除卡死的 log.db 文件
root@SA6400:~# rm /volume1/@docker/containers/ade3d41604b8fb9b129ecc238df250a4f676463a6d6aaf2fc8c57d8b99f9403e/log.db
# 3、重新启动容器,完成
root@SA6400:~# docker start blog-pro-php
blog-pro-php