Docker磁盘空间被占满怎么办?镜像与容器日志清理方法详解

用Docker部署应用的团队几乎都会遇到同一个问题:服务器磁盘用着用着就满了,df一看明明没装多少东西。这通常是Docker在悄悄吃空间——构建产生的悬空镜像、反复拉取的新版本镜像、以及不设上限的容器日志,都会在不知不觉中把磁盘塞满。本文整理一套Docker磁盘清理的完整方法。

docker磁盘空间清理

先看清楚空间都被谁占了

清理之前先做体检,明确空间去向,避免盲目删除。Docker自带的命令可以直接给出占用概览:

# 查看Docker各项资源占用
sudo docker system df

# 查看镜像与容器占用的详细情况
sudo docker system df -v | head -60

# 查看最大的镜像
sudo docker images | sort -k7 -h | tail -10

输出里的 Images 指镜像层占用的总量,Containers 指运行中容器的可写层,Local Volumes 是具名数据卷,Build Cache 是构建缓存。看清这几项的比例,就知道该从哪里入手了。

清理悬空镜像与无用资源

docker system prune 是最常用的清理命令,会删除已停止的容器、悬空镜像与无用网络。加 -a 参数会进一步删除所有未被容器使用的镜像,谨慎使用,因为删除后需要重新拉取:

# 只清理悬空资源(推荐日常使用)
sudo docker system prune -f

# 彻底清理所有未使用镜像与构建缓存
sudo docker system prune -a --volumes -f

需要说明:–volumes 会删除未被容器引用的数据卷,里面可能存有重要数据,执行前务必确认没有需要保留的卷。建议先用 docker volume ls 检查一遍。

清理失控增长的容器日志

容器默认会把日志写到宿主机的 /var/lib/docker/containers 下,如果不加限制,单个容器日志可以涨到几个G甚至几十个G。最有效的做法是从源头限制:在 /etc/docker/daemon.json 里配置日志轮转后重启Docker:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "20m",
    "max-file": "5"
  }
}

# 重启Docker使配置生效
sudo systemctl restart docker

对已经超大的日志文件,可以清空正在使用的日志(容器无需重启,因为它是按文件追加写入的):

# 找出占用最大的容器日志文件
sudo du -sh /var/lib/docker/containers/*/*-json.log | sort -rh | head

# 清空指定容器的日志文件
sudo truncate -s 0 /var/lib/docker/containers/<容器ID>/*-json.log

如何从源头减少磁盘占用

  • 镜像尽量使用精简的基础镜像(如alpine),减小镜像体积;
  • Dockerfile里把依赖安装与清理放在同一层,减少中间层残留;
  • 不用的旧镜像通过标签策略定期清理,或接入镜像仓库的保留策略;
  • 高频更新的服务做好日志采集(如接入日志平台),宿主机上不保留过多历史日志;
  • 为日志目录和数据目录单独挂载数据盘,避免与系统盘争抢空间。

相关问答FAQs

  • 问:docker system prune -a 会把正在用的镜像删掉吗?答:不会,它只删除没有被任何容器(含停止容器)引用的镜像,但删除后重新拉取需要时间,生产环境请谨慎。
  • 问:清理构建缓存会影响什么?答:只会让下次构建重新拉取依赖、构建时间变长,不会影响已构建的镜像。
  • 问:容器日志能设置自动清理吗?答:可以,最推荐的方式是配置daemon.json的日志轮转参数,或使用docker-compose中logging段的max-size配置。

Docker磁盘问题预防大于清理:日志限流、精简镜像、定期prune应该成为日常运维习惯。建议把 docker system df 和日志大小检查加入每周巡检脚本,在磁盘告警之前就发现问题,而不是等空间满了再连夜清理。

【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!

赞 (0)
爱家的头像爱家
Linux防火墙firewalld怎么用?常用命令与放行端口配置详解
上一篇 2026-09-06 08:00
HTTPS证书到期没续签怎么办?Let’s Encrypt自动续期配置详解
下一篇 2026-09-06 10:01

相关推荐

  • 东南亚最便宜的服务器是什么

    东南亚最便宜的服务器价格因供应商和配置而异,但通常VPS(虚拟私有服务器)会比专用物理服务器便宜。一些流行的服务提供商如DigitalOcean、Vultr和Linode提供性价比较高的VPS方案,起价可能在每月5到10美元左右。

    2024-07-12
    0018
  • Switch代理服务器的端口号有什么作用?

    Switch代理服务器端口指的是在网络通信中,用于标识特定服务进程的接口。它使得客户端能够通过特定的端口号来连接和访问switch代理服务器上的特定服务。

    2024-07-29
    0036
  • 如何在MySQL中复制表结构并确保兼容MySQL模式?

    要在MySQL中复制表结构,可以使用以下SQL语句:,,“sql,CREATE TABLE 新表, LIKE 原表;,`,,将新表替换为要创建的新表的名称,将原表`替换为要复制结构的现有表的名称。

    2024-08-27
    008
  • 如何绕过MySQL数据库的密码验证和强制修改密码机制?

    要在MySQL数据库中跳过密码验证和强制修改密码,可以通过编辑MySQL配置文件来实现。请按照以下步骤操作:,,1. 打开MySQL配置文件(my.cnf或my.ini),通常位于/etc/mysql/或C:\ProgramData\MySQL\MySQL Server 8.0\目录下。,,2. 在[mysqld]部分添加以下配置项:,,“,skipgranttables,skipforcelogin,“,,3. 保存并关闭配置文件。,,4. 重启MySQL服务以使更改生效。,,注意:这样做会降低安全性,因为任何人都可以在不提供密码的情况下访问数据库。在生产环境中,请谨慎使用此方法。

    2024-08-26
    0015

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

广告合作

QQ:14239236

在线咨询: QQ交谈

邮件:asy@cxas.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信