问题描述

今天在docker卸载时候,未关闭容器只关闭了docker,出现docker的镜像文件无法卸载的情况。下面我将记录整个docker的卸载流程,以及在卸载镜像文件出现Device or resource busy,取消挂载的时候又出现umount: /var/lib/docker/containers/: not mounted的情况。


卸载流程:

1. 停掉运行的容器,停掉docker

先停掉全部运行的容器,并删除,最后停掉docker,这一步作为卸载的重中之重,千万不要忘记做

# 停止全部运行中的容器
docker stop $(docker ps -a -q)
# 删除全部容器
docker  rm $(docker ps -a -q)
# 停止docker运行
systemctl stop docker

2. 删除docker文件包

查看yum安装的docker文件包,查看docker相关的rpm源文件,并删除对应的二进制文件

# 查看yum安装的docker文件包
yum list installed | grep docker
# 查看docker相关的rpm源文件
rpm -qa | grep docker
# 删除所有安装的docker文件包
yum -y remove docker-*
# 再次检查docker的安装包
rpm -qa | grep docker

3. 删除docker镜像文件

docker的镜像文件默认在/var/lib/docker下

# 删除docker的镜像文件
rm -rf /var/lib/docker

三个问题

1. 无法删除/var/lib/docker,提示Device or resource busy

rm: cannot remove ‘/var/lib/docker/containers/7be2e6f755ed8e2d549254a1339fd
029b9f93f4b5d344f4458246d2738eb0b3b/mounts/shm’: Device or resource busy
rm: cannot remove ‘/var/lib/docker/containers/87f7da1724422baf169f4b5544fbb
f725f361616e400c5bb6cc19643f194c902/mounts/shm’: Device or resource busy

解决方案:

使用umount指令取消上述两个容器的挂载

umount /var/lib/docker/containers/7be2e6f755ed8e2d549254a1339
fd029b9f93f4b5d344f4458246d2738eb0b3b
umount /var/lib/docker/containers/87f7da1724422baf169f4b5544f
bbf725f361616e400c5bb6cc19643f194c902

2. 无法取消挂载/var/lib/docker,提示is busy

umount: /var/lib/docker/containers/87f7da1724422baf169f4b5544fbb
f725f361616e400c5bb6cc19643f194c902/mounts/shm is busy

解决方案:

使用losf杀掉占用的进程,重新执行取消挂载操作

# 如果lsof指令不存在,请使用yum安装
yum install lsof -y
# 查询占用的进程
lsof | grep 7be2e6f755ed8e2d549254a1339fd029b9f93f4b5d344f4458246d2738eb0b3b
# 杀掉全部占用的进程
kill -9 3928
# 查询占用的进程
lsof | grep 87f7da1724422baf169f4b5544fbbf725f361616e400c5bb6cc19643f194c902
# 杀掉全部占用的进程
kill -9 3928

白框部分就是进程号,杀掉全部进程然后重新执行取消挂载

3. 无法取消挂载/var/lib/docker,提示not mounted

umount: /var/lib/docker/containers/87f7da1724422baf169f4b5544fbb
f725f361616e400c5bb6cc19643f194c902/ not mounted

解决方案:

路径错了,正确路径应该是busy的那个路径..

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐