- 在使用docker部署我们的服务时,偶尔会遇到这种情况,使用如下命令:
- docker ps 显示容器状态正常,但是对外服务已经不可用
- docker stats 没有任何反应
- docker stop CONTAINER_ID 没有任何反应
- docker restart CONTAINER_ID 也没有任何反应
- docker exec -it –user root CONTAINER_ID /bin/bash 也没有任何反应
- docker logs CONTAINER_ID --tail 111 -f 也没有任何反应
- docker-compose命令也提示响应超时,不可用
本文内容有
- 手动清理假死的docker服务
执行docker ps
命令找到容器ID【CONTAINER_ID】
docker stop 【CONTAINER_ID】
发现停不掉
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 目录名
这个时候就可以删掉了
docker stop 【CONTAINER_ID】
或
docker rm -f 【CONTAINER_ID】
或
docker kill --signal=SIGINT 【CONTAINER_ID】
如果还是无法停掉改服务,可以按如下步骤:
使用linux进程管理命令来结束容器进程
先找到该进程:
ps -ef | grep【CONTAINER_ID】
强制杀掉筛选出来的进程信息:
kill -9 PID
docker ps
可以看到该服务已经被干掉了。
直接停止docker.service,重启后自然就好了,如果服务太多,我不建议这样使用,太慢了,而且影响其他服务。
sudo service restart docker