一、
code
sudo docker system prune -af --volumes

👉 一句话版

删除 Docker 里所有“没在用的垃圾”,包括镜像、停止的容器、网络、构建缓存,以及未使用的 volume


1️⃣ 命令结构拆解

bash
sudo docker system prune -af --volumes

🔹
code
sudo

  • root 权限
  • 因为 Docker 的数据在
    code
    /var/lib/docker
    ,普通用户没权限

🔹
code
docker system prune

  • code
    docker system
    :Docker 的系统级管理
  • code
    prune
    修剪 / 清理

默认会清理:

  • ❌ 已停止的容器
  • ❌ 未使用的网络
  • ❌ 悬空镜像(dangling images)
  • ❌ build cache

🔹
code
-a
(=
code
--all

非常重要

  • 不仅删“悬空镜像”
  • 还会删除所有“未被任何容器使用的镜像”

举例:

  • code
    docker pull
    过,但现在没容器用 → 会删
  • 下次要用 → 会重新 pull

🔹
code
-f
(=
code
--force

  • 不询问你确认
  • 适合磁盘已经 100% 满的情况

🔹
code
--volumes

最危险、但也是最能释放空间的一项

  • ❌ 删除 未被任何容器挂载的 volume

  • 例如:

    • 老容器用过,后来删了容器
    • volume 还在 → 占空间 → 会被删

📌 不会删的

  • 正在被运行中的容器使用的 volume
  • 当前
    code
    docker-compose up
    里的 volume

2️⃣ 这个命令「会删什么 / 不会删什么」

✅ 会删

项目说明
停止的容器
code
Exited
没被用的镜像包括你以前 pull 的
构建缓存
code
buildx / layer cache
未使用的 volume
code
--volumes
未使用的 network

❌ 不会删

项目说明
正在运行的容器安全
正在被使用的 volume安全
宿主机普通文件

3️⃣ 什么时候用它?

  • code
    df -h
    显示
    code
    /
    100%
  • Docker 跑久了
  • 测试 / CI / 构建机器
  • 镜像更新频繁的服务器

二、
code
sudo sh -c 'truncate -s 0 /var/lib/docker/containers/*/*-json.log'

👉 一句话版

把所有 Docker 容器的日志文件清空,但不删文件、不重启容器

这是你这次“磁盘爆满”的最常见元凶


1️⃣ Docker 日志是怎么长大的?

默认 Docker 使用

code
json-file
日志驱动:

  • 容器 stdout / stderr
  • 全部写进:
text
/var/lib/docker/containers/<容器ID>/<容器ID>-json.log

如果你的服务疯狂

code
print / log

  • 日志可能 几十 GB
  • Docker 默认 不会自动轮转

2️⃣ 命令拆解(重点)

bash
sudo sh -c 'truncate -s 0 /var/lib/docker/containers/*/*-json.log'

🔹 为什么要
code
sh -c

  • 通配符
    code
    *
    需要 root shell 展开
  • 否则会权限不足或匹配失败

🔹
code
truncate -s 0

  • code
    truncate
    :修改文件大小
  • code
    -s 0
    :设置为 0 字节

⚠️ 重点:

  • 文件还在
  • inode 不变
  • Docker 不会报错
  • 容器继续运行

👉 这是官方推荐的清日志方式


🔹
code
/var/lib/docker/containers/*/*-json.log

  • 所有容器的日志文件
  • 包括正在运行的

3️⃣ 为什么不用
code
rm

❌ 不推荐:

bash
rm *-json.log

原因:

  • Docker 进程仍然持有文件句柄
  • 空间可能不会立刻释放
  • 可能导致日志异常

code
truncate
最安全


4️⃣ 这个命令会 / 不会影响什么?

✅ 会做的

  • 释放磁盘空间
  • 日志从 0 开始重新写

❌ 不会做的

  • 不会停止容器
  • 不会删容器
  • 不会删镜像
  • 不会影响服务运行

三、为什么这两个命令要一起用?

问题来源对应命令
镜像 / volume / cache 堆积
code
docker system prune -af --volumes
日志无限增长
code
truncate ...*-json.log

👉 一个清“尸体”,一个止“出血”


四、最重要的一句提醒(一定要做)

清完这次 必须 配日志限制,否则还会再满:

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

评论

还没有评论,来做第一个留言的人吧。

发表评论

验证码: