问题描述
今天在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的那个路径..