当使用 docker rmi
命令无法删除镜像时,通常有以下几种原因和对应的解决方法:
现象:报错提示镜像被运行的容器或停止的容器使用
解决方法:
# 查看所有容器(包括停止的)
docker ps -a
# 删除引用该镜像的容器
docker rm 容器ID
# 强制删除所有停止的容器
docker container prune
# 然后再尝试删除镜像
docker rmi 镜像ID
现象:镜像有多个标签名,直接删除只会移除指定的标签
解决方法:
# 查看镜像的所有标签
docker images --digests
# 删除所有相关标签
docker rmi 镜像名:标签1 镜像名:标签2
# 或者强制删除所有关联的标签
docker rmi -f 镜像ID
现象:镜像被其他镜像作为基础层依赖
解决方法:
# 查看镜像依赖关系
docker image inspect 镜像ID
# 先删除依赖它的子镜像
docker rmi 子镜像ID
# 或者强制删除
docker rmi -f 镜像ID
现象:删除时报存储驱动相关错误
解决方法:
# 清理未使用的镜像和缓存
docker system prune -a
# 重启docker服务
sudo systemctl restart docker
# 再尝试删除
现象:删除操作因磁盘空间不足失败
解决方法:
# 查看docker磁盘使用情况
docker system df
# 清理无用数据
docker system prune -a --volumes
如果上述方法都不奏效,可以尝试:
直接删除存储文件(谨慎操作):
sudo rm -rf /var/lib/docker/image/overlay2/imagedb/content/sha256/镜像ID
sudo systemctl restart docker
使用atomic删除:
docker run -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/docker:/var/lib/docker --rm martin/docker-cleanup rmi 镜像ID
重建Docker存储(最后手段,会删除所有本地镜像和容器):
sudo systemctl stop docker
sudo rm -rf /var/lib/docker
sudo systemctl start docker
在执行任何删除操作前,建议先确认镜像确实不再需要,并备份重要数据。