一、codesudo docker system prune -af --volumes
code
sudo docker system prune -af --volumes👉 一句话版:
删除 Docker 里所有“没在用的垃圾”,包括镜像、停止的容器、网络、构建缓存,以及未使用的 volume。
1️⃣ 命令结构拆解
bash
sudo docker system prune -af --volumes🔹 codesudo
code
sudo- 用 root 权限
- 因为 Docker 的数据在 ,普通用户没权限code
/var/lib/docker
🔹 codedocker system prune
code
docker system prune- :Docker 的系统级管理code
docker system - :修剪 / 清理code
prune
默认会清理:
- ❌ 已停止的容器
- ❌ 未使用的网络
- ❌ 悬空镜像(dangling images)
- ❌ build cache
🔹 code-a
(= code--all
)
code
-acode
--all非常重要
- 不仅删“悬空镜像”
- ❌ 还会删除所有“未被任何容器使用的镜像”
举例:
- 你 过,但现在没容器用 → 会删code
docker pull - 下次要用 → 会重新 pull
🔹 code-f
(= code--force
)
code
-fcode
--force- 不询问你确认
- 适合磁盘已经 100% 满的情况
🔹 code--volumes
code
--volumes最危险、但也是最能释放空间的一项
-
❌ 删除 未被任何容器挂载的 volume
-
例如:
- 老容器用过,后来删了容器
- volume 还在 → 占空间 → 会被删
📌 不会删的:
- 正在被运行中的容器使用的 volume
- 当前 里的 volumecode
docker-compose up
2️⃣ 这个命令「会删什么 / 不会删什么」
✅ 会删
| 项目 | 说明 |
|---|---|
| 停止的容器 | code |
| 没被用的镜像 | 包括你以前 pull 的 |
| 构建缓存 | code |
| 未使用的 volume | code |
| 未使用的 network |
❌ 不会删
| 项目 | 说明 |
|---|---|
| 正在运行的容器 | 安全 |
| 正在被使用的 volume | 安全 |
| 宿主机普通文件 |
3️⃣ 什么时候用它?
- 显示code
df -h100%code/ - Docker 跑久了
- 测试 / CI / 构建机器
- 镜像更新频繁的服务器
二、codesudo sh -c 'truncate -s 0 /var/lib/docker/containers/*/*-json.log'
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'🔹 为什么要 codesh -c
?
code
sh -c- 通配符 需要 root shell 展开code
* - 否则会权限不足或匹配失败
🔹 codetruncate -s 0
code
truncate -s 0- :修改文件大小code
truncate - :设置为 0 字节code
-s 0
⚠️ 重点:
- 文件还在
- inode 不变
- Docker 不会报错
- 容器继续运行
👉 这是官方推荐的清日志方式
🔹 code/var/lib/docker/containers/*/*-json.log
code
/var/lib/docker/containers/*/*-json.log- 所有容器的日志文件
- 包括正在运行的
3️⃣ 为什么不用 coderm
?
code
rm❌ 不推荐:
bash
rm *-json.log原因:
- Docker 进程仍然持有文件句柄
- 空间可能不会立刻释放
- 可能导致日志异常
✅
code
truncate4️⃣ 这个命令会 / 不会影响什么?
✅ 会做的
- 释放磁盘空间
- 日志从 0 开始重新写
❌ 不会做的
- 不会停止容器
- 不会删容器
- 不会删镜像
- 不会影响服务运行
三、为什么这两个命令要一起用?
| 问题来源 | 对应命令 |
|---|---|
| 镜像 / volume / cache 堆积 | code |
| 日志无限增长 | code |
👉 一个清“尸体”,一个止“出血”
四、最重要的一句提醒(一定要做)
清完这次 必须 配日志限制,否则还会再满:
json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}评论
还没有评论,来做第一个留言的人吧。