清理 Docker 资源

1. 一键全自动清理(推荐)

如果你不想一个一个检查,可以使用 Docker 提供的“核武器”指令。它会删除所有悬空(dangling)的资源(即没有被任何容器使用的镜像、已停止的容器等)。

docker system prune
  • 进阶版: 如果你想把所有未使用的镜像(而不只是无标签的悬空镜像)和卷也删掉,可以加上 -a--volumes 参数:
docker system prune -a --volumes
注意: 这会删除所有未运行容器关联的镜像,执行前请确保你不需要重启那些处于停止状态的容器。

2. 分类精准打击

如果你希望有针对性地清理,可以参考下表:

对象命令说明
容器 (Containers)docker container prune删除所有已停止的容器
镜像 (Images)docker image prune删除悬空的镜像(<none>:<none>
数据卷 (Volumes)docker volume prune重点: 删除未被挂载的匿名卷(最占空间)
网络 (Networks)docker network prune删除未被使用的自定义网络

3. 深度清理:排查大文件

有时候即便执行了上述命令,磁盘占用依然很高,这通常由以下两个原因导致:

A. 日志文件过大

Docker 默认不限制日志大小,容器运行久了,日志可能高达几十 GB。

  • 查看日志大小:
    ls -lh /var/lib/docker/containers/*/*-json.log
  • 临时清理:
    truncate -s 0 /var/lib/docker/containers/*/*-json.log
        ```
        *(这会清空日志内容但不删除文件)*
    
    #### B. 未使用的 Build Cache (构建缓存)
    如果你经常在 VPS 上构建镜像,构建缓存会占用大量空间:
    ```bash
    docker builder prune

4. 预防措施:限制日志大小

为了防止以后日志再次撑爆磁盘,建议在 /etc/docker/daemon.json 中配置日志上限:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

配置完成后,重启 Docker 服务:systemctl restart docker


💡 实用小技巧

在清理之前,你可以先执行以下命令查看 Docker 到底占用了多少空间:

docker system df

这会列出镜像、容器、卷的磁盘占用详情,让你做到心中有数。