Docker 怎么清理无用镜像容器卷释放磁盘空间命令大全

文章导读
Docker 磁盘空间不足时,最稳妥的做法是先使用 docker system df 查看占用分布,再根据是否保留停止的容器和未使用的卷选择 prune 命令。生产环境务必先备份数据再执行清理。
📋 目录
  1. 核心清理命令
  2. 实操步骤
  3. 数据卷备份方案
  4. 高级用法:按时间过滤
  5. 跨平台注意事项与常见坑
  6. 怎么验证是否生效
  7. 参考来源
A A

Docker 磁盘空间不足时,最稳妥的做法是先使用 docker system df 查看占用分布,再根据是否保留停止的容器和未使用的卷选择 prune 命令。生产环境务必先备份数据再执行清理。

先说结论:清理操作不可逆,尤其是卷和数据容器,务必先确认哪些数据不再需要再执行删除命令。

  • 先看:用 docker system df 确认空间被镜像、容器还是卷占用
  • 先做:停止不再需要的容器,备份重要数据卷
  • 建议:生产环境避免使用 -a 参数一次性清理所有未使用镜像,防止误删回滚版本
  • 注意:Windows 用户请使用绝对路径,避免使用 $(pwd) 等 Linux shell 变量

核心清理命令

# 查看磁盘使用情况
docker system df

# 清理停止的容器、dangling 镜像、未使用的网络(安全)
docker system prune

# 清理所有未使用的镜像(不仅仅是 dangling,慎用)
docker system prune -a

# 清理未使用的卷(危险,会删除数据)
docker volume prune

# 清理构建缓存
docker builder prune

实操步骤

第一步:检查当前占用
执行 docker system df 查看 Images、Containers、Volumes 和 Build Cache 的具体占用大小。

第二步:停止并备份
确认哪些容器不再需要。对于数据卷,建议先备份重要数据。Windows 用户请使用绝对路径,Linux 用户可使用 $(pwd)。

Docker 怎么清理无用镜像容器卷释放磁盘空间命令大全

第三步:执行清理
根据检查结果选择命令。如果只想清理 dangling 镜像和停止的容器,使用 docker system prune。如果需要清理所有未使用的镜像,加上 -a。如果确定卷无用,再执行 docker volume prune

数据卷备份方案

清理卷之前,建议将重要数据卷打包备份。以下命令将卷内容备份到宿主机当前目录。

# Linux/Mac (支持 $(pwd))
docker run `--rm` -v 卷名:/data -v $(pwd):/backup alpine tar czf /backup/vol.tar.gz -C /data .

# Windows CMD (使用绝对路径)
docker run `--rm` -v 卷名:/data -v D:/backup:/backup alpine tar czf /backup/vol.tar.gz -C /data .

# PowerShell (使用绝对路径)
docker run `--rm` -v 卷名:/data -v C:/backup:/backup alpine tar czf /backup/vol.tar.gz -C /data .

注意:请将“卷名”替换为实际卷名,将路径替换为实际存在的目录。

Docker 怎么清理无用镜像容器卷释放磁盘空间命令大全

高级用法:按时间过滤

如果只想清理特定时间之前产生的无用资源,可以使用 `--filter` 参数。

# 清理 24 小时前创建的悬空镜像和停止容器
docker system prune `--filter` "until=24h"

# 清理特定标签之前的镜像
docker image prune `--filter` "until=2023-01-01T00:00:00"

跨平台注意事项与常见坑

1. 路径兼容性:Linux 命令中的 $(pwd) 在 Windows CMD 中无效,会导致备份路径错误。Windows 用户建议直接使用绝对路径(如 D:/docker/backup)。

2. 误删数据卷:docker volume prune 会删除所有未被容器挂载的卷。如果某些容器只是停止状态但未来需要启动,其关联的数据卷会被清除,导致数据丢失。

Docker 怎么清理无用镜像容器卷释放磁盘空间命令大全

3. 误删回滚镜像:使用 docker system prune -a 会删除所有未被运行容器使用的镜像,包括你保留用于快速回滚的旧版本镜像。

4. 构建缓存误判:清理构建缓存可能影响后续构建速度,但通常不影响运行中的容器。

怎么验证是否生效

再次运行 docker system df 对比清理前后的 SIZE 列数值。同时可以使用 df -h (Linux/Mac) 或资源管理器 (Windows) 查看宿主机的磁盘挂载点使用情况是否回升。

参考来源

  • Docker 官方文档 - Manage disk space: https://docs.docker.com/config/pruning/
  • Docker 官方文档 - docker system prune: https://docs.docker.com/engine/reference/commandline/system_prune/