网站首页 > 教程文章 正文
技术背景
在使用Docker进行开发和测试过程中,随着时间的推移,本地会积累大量不再需要的Docker镜像和容器。这些冗余的镜像和容器会占用大量磁盘空间,影响系统性能。因此,了解如何有效地删除本地Docker镜像和容器是很有必要的。
实现步骤
1. 删除所有容器
在删除镜像之前,需要先确保所有相关容器已经被删除。因为如果有容器正在使用某个镜像,Docker将不允许删除该镜像。
Unix系统
docker rm -vf $(docker ps -aq)
此命令会列出所有容器的ID,并使用docker rm -vf强制删除这些容器及其关联的卷。
Windows - PowerShell
docker images -a -q | % { docker image rm $_ -f }
该命令通过管道将所有镜像的ID传递给docker image rm -f命令,逐个强制删除镜像。
Windows - cmd.exe
for /F %i in ('docker images -a -q') do docker rmi -f %i
该命令使用for循环遍历所有镜像的ID,并执行docker rmi -f命令强制删除镜像。
2. 删除所有镜像
使用docker rmi命令
docker rmi -f $(docker images -aq)
此命令会列出所有镜像的ID,并使用docker rmi -f强制删除这些镜像。
使用docker system prune命令
docker system prune -a --volumes
该命令会删除所有停止的容器、未被使用的网络、卷、没有关联容器的镜像以及所有构建缓存。
使用docker image prune命令
docker image prune -a -f
此命令会删除所有未被使用的镜像,-a参数表示删除所有未使用的镜像,而不仅仅是悬空镜像,-f参数表示不进行确认提示。
核心代码
Unix系统删除所有容器和镜像
# 删除所有容器
docker rm -vf $(docker ps -aq)
# 删除所有镜像
docker rmi -f $(docker images -aq)
使用docker system prune清理所有未使用资源
docker system prune -a --volumes
使用docker image prune删除未使用镜像
docker image prune -a -f
最佳实践
- 定期清理:定期执行清理命令,避免本地镜像和容器过多。
- 使用过滤器:如果只想删除特定的镜像,可以使用docker rmi -f $(docker images -af <YOUR_FILTER_PATTERN> -q)命令,例如docker rmi -f $(docker images -af since=node:18 -q)。
- 脚本化操作:将清理命令编写成脚本,方便重复执行。
常见问题
1. 权限问题
在某些系统上,可能需要使用sudo来执行Docker命令,例如在AWS EC2的Ubuntu实例上:
sudo docker rm -vf $(sudo docker ps -aq)
sudo docker rmi -f $(sudo docker images -aq)
2. 磁盘空间未释放
如果使用docker system prune -a --volumes后磁盘空间未完全释放,可能是由于某些文件系统缓存或其他问题。可以尝试重启Docker服务或系统。
3. 镜像被容器引用
如果在删除镜像时提示“image is being used by running container”,则需要先停止并删除相关容器,再删除镜像。
猜你喜欢
- 2025-05-21 10张图带你深入理解Docker容器和镜像
- 2025-05-21 Docker实战(二):快速学会镜像的基本使用
- 2025-05-21 那些被"删除"却仍占用空间的文件
- 2025-05-21 Docker镜像与容器的区别
- 2025-05-21 Docker基础知识之操作镜像
- 2025-05-21 带你找回那些被 Docker 吃掉的磁盘空间
- 2025-05-21 Docker工具的使用方法进阶-关于镜像
- 2025-05-21 无论是开发还是运维,都必须掌握的Docker常用命令
- 2025-05-21 Windows 上 Docker 镜像与容器更新全攻略
- 2025-05-21 docker常用命令大全,看这一篇就够了
- 最近发表
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- mybatis plus page (35)
- vue @scroll (38)
- 堆栈区别 (33)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)
- redis aof rdb 区别 (33)
- 302跳转 (33)
- http method (35)
- js array splice (33)