0
点赞
收藏
分享

微信扫一扫

docker服务假死解决方案

星巢文化 2022-04-14 阅读 75
java后端

简介

原文传送门


1、手动清理假死的docker服务

1.1 找到假死的docker服务

执行docker ps命令找到容器ID【CONTAINER_ID】

1.2 先尝试使用docker自带的命令停止容器

docker stop 【CONTAINER_ID】 发现停不掉

1.3 手动查找docker目录下的容器信息,并删掉

docker默认目录:/var/lib/docker

所有docker容器的信息都挂载在/var/lib/docker/containers目录下

通过【CONTAINER_ID】找到该假死服务的目录

ll /var/lib/docker/containers | grep 【CONTAINER_ID】

cd /var/lib/docker/containers

rm -rf 目录名

这里删除可能会报下面的错误,因为你的容器还挂载了其他目录,信息如下:

rm: 无法删除"/var/lib/docker/containers/目录名/secrets": 设备或资源忙
无法删除"/var/lib/docker/containers/目录名/shm": 设备或资源忙

这个时候查一下容器对应的挂载目录

cat /proc/mounts |grep "docker" |grep "【CONTAINER_ID】"

然后先取消挂载

umount /data/sys/var/docker/containers/挂载目录/secrets
umount /data/sys/var/docker/containers/挂载目录/shm

如果这一步 unmout 不了,可以尝试找到使用该目录的进程

lsof |grep "挂载目录"

如果有相关进程,记录相关的进程号直接 kill -9 进程号

这个时候再重新执行删除目录命令

ll /var/lib/docker/containers | grep 【CONTAINER_ID】

cd /var/lib/docker/containers

rm -rf 目录名

这个时候就可以删掉了

1.4 再次尝试通过docker的命令停止容器

docker stop 【CONTAINER_ID】

docker rm -f 【CONTAINER_ID】

docker kill --signal=SIGINT 【CONTAINER_ID】

如果还是无法停掉改服务,可以按如下步骤:

使用linux进程管理命令来结束容器进程

先找到该进程:

ps -ef | grep【CONTAINER_ID】

强制杀掉筛选出来的进程信息:

kill -9 PID

1.5 再次检查docker服务状态

docker ps

可以看到该服务已经被干掉了。

1.6 最粗暴的解决方案如下

直接停止docker.service,重启后自然就好了,如果服务太多,我不建议这样使用,太慢了,而且影响其他服务。

sudo service restart docker

举报

相关推荐

0 条评论