常常用DSM安装的docker套件,部署qBittorrent镜像,用作PT资源的转载。
可是常常qBittorrent常常会无下载速度,就很奇怪,一排查发现其容器无法关闭、重启,强制关闭也无效。
使用命令行对其容器进行关闭时还会遇到卡死状态......
最后上网查找了下问题得知是docker容器死锁导致问题发生的。
问题状况
- docker套件无法对容器操作,错误提示:Docker API失败。请访问Docker日志以获得更多信息。

- docker ps命令卡住
- docker ps命令,响应是dockerd是不是在运行
- docker restart 容器id 命令卡住,无响应
- 无法重启docker服务
解决方法
常见解决方法:dockerd出现异常,可以查看具体的docker日志,分析具体日志,重启docker,找到dockerd进程,kill即可。
寻找卡住的容器id
docker ps | grep -v NAME | awk '{print 1}' | while read i; do echoi; docker inspect -f {{.State.Pid}} $id; done
查找卡住的容器
docker inspect 容器id
查看该容器id的pid
ps aux |grep 容器id|grep shim
杀死该容器的进程
kill -9 shim进行pid
注:此处需要多次回到上一步(即“查看该容器id的pid”),看是否还有进程在运行,如果有,则需要多次杀死该步骤中的pid

重启docker服务即可
附属问题
重启docker服务一直处于starting状态
解决方法:
1. 查看shim进程是否残留,有的话kill这些shim进程可以恢复
2. 如果没有shim进程,重启一下containerd(猜测:可能是dockerd跟containerd通信问题)
3. 最后可以将dockerd的进程kill掉,重新restart docker
重启docker容器报错
报错如下:
Error response from daemon: Cannot restart container qBittorrent: OCI runtime create failed: container with id exists: 报错docker容器id: unknown
错误原因:因qBittorrent容器进程未能正常结束,导致报错OCI runtime create failed。
解决方法:
1. 删除报错容器的运行状态文件夹
rm -rf /run/docker/runtime-runc/moby/报错docker容器id/
2. 重启报错容器
docker restart qBittorrent