本文目前只是梳理了框架,并未补充细节
经常遇到 docker 占用空间,都磁盘都快满了。
网上搜的方法都是df, du分析,说实话有点折腾,效果还不咋地
docker system df执行获得以下结果:
$ sudo docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 15 12 11.87GB 3.87GB (32%)
Containers 12 11 147.9MB 0B (0%)
Local Volumes 2 2 0B 0B
Build Cache 0 0 0B 0B可通过以下命令做清理:
docker system prune -a注意:
docker system prune 命令可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及 dangling 镜像(即无 tag 的镜像)。
docker system prune -a 命令清理得更加彻底,会将没有容器使用 Docker 镜像都删掉。
注意,这两个命令会把你暂时关闭的容器,以及暂时没有用到的 Docker 镜像都删掉了…所以使用之前一定要想清楚吶。
🧹 Docker 容器日志爆炸清理实战(11GB 日志案例)
在排查磁盘占满问题时,可以优先检查 Docker 容器日志目录:
sudo du -h /var/lib/docker/containers | sort -hr | head
典型输出如下:
11G /var/lib/docker/containers
9.2G /var/lib/docker/containers/f7a21bf95136...
1.3G /var/lib/docker/containers/5f9a7bddca8f...
这说明某些容器日志已经达到 GB 级别,极可能是服务异常导致日志持续输出。
📁 Docker 日志存储机制
Docker 默认使用 json-file 日志驱动,日志文件路径为:
/var/lib/docker/containers/<container_id>/<container_id>-json.log
这些日志来自容器的 stdout/stderr,如果不加限制会持续增长。
🔍 定位具体日志文件
sudo ls /var/lib/docker/containers/<container_id>
或使用 find:
sudo find /var/lib/docker/containers/<container_id> -name "*-json.log"
⚡ 快速释放磁盘空间(安全操作)
直接清空日志文件(不会影响容器运行):
sudo truncate -s 0 /var/lib/docker/containers/<container_id>/<container_id>-json.log
批量清理:
sudo find /var/lib/docker/containers/ -name "*-json.log" -exec truncate -s 0 {} \;
⚠️ 注意事项
此操作只清空日志,不删除容器数据
适用于紧急释放磁盘空间
如果日志持续增长,说明服务可能存在异常(如连接失败、频繁报错等)
🛡️ 防止日志再次膨胀
建议为 Docker 配置日志大小限制:
logging:
driver: "json-file"
options:
max-size: "100m"
max-file: "3"
或全局配置 /etc/docker/daemon.json:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
}
}
重启 Docker 生效:
sudo systemctl restart docker
✅ 小结
Docker 容器日志是磁盘占满的常见原因之一,尤其是在服务异常时可能迅速膨胀至数 GB。
通过定期检查与限制日志大小,可以有效避免此类问题。
参考链接: