Docker-排查占用磁盘空间大问题

文章目录

概述

最近连续遇到两次,docker占用大量磁盘空间,磁盘告警的情况。把排查过程记录如下。

环境

系统

  • CentOS 7.9
  • Docker 26.1.4

现象

磁盘使用率98%,监控告警。经排查发现都是/var/lib/docker目录下占用的。

bash 复制代码
[root@centos7.9]# du -sh  --exclude="mysql" /var/lib/* | sort -rh
425G     /var/lib/docker
101M    /var/lib/rpm
14M     /var/lib/yum
4.5M    /var/lib/samba
224K    /var/lib/containerd
120K    /var/lib/alternatives
64K     /var/lib/systemd
8.0K    /var/lib/NetworkManager
8.0K    /var/lib/authconfig

......

0       /var/lib/avahi-autoipd

解决

情况1-容器日志大

  1. 使用以下命令排查,发现某个容器日志占用了200G
bash 复制代码
sudo du -sh /var/lib/docker/containers/*/*-json.log | sort -rh
bash 复制代码
[root@centos7 var]# sudo du -sh /var/lib/docker/containers/*/*-json.log | sort -rh
200G     /var/lib/docker/containers/39b55d6c55766a08953411f7dfa88f198779105202d5a07175d07cf26af23765/39b55d6c55766a08953411f7dfa88f198779105202d5a07175d07cf26af23765-json.log
16M     /var/lib/docker/containers/249693a2d4580c375b164af52ba576b6d8ea448179c7496b9f0d94627dec1016/249693a2d4580c375b164af52ba576b6d8ea448179c7496b9f0d94627dec1016-json.log

快速解决-清理日志

  1. 手动清除日志
bash 复制代码
sudo truncate -s 0 /var/lib/docker/containers/39b55d6c55766a08953411f7dfa88f198779105202d5a07175d07cf26af23765/39b55d6c55766a08953411f7dfa88f198779105202d5a07175d07cf26af23765-json.log
  1. 增加cron定时任务
  • 强制清除超过10G的容器日志文件
bash 复制代码
# 查询命令
# find /var/lib/docker/containers/ -name "*-json.log" -size +10G -ls
# 清理任务
0 0 * * *  find /var/lib/docker/containers/ -name "*-json.log" -size +10G -exec truncate -s 0 {} \;

长期解决-限制日志大小

  1. 修改容器配置
bash 复制代码
vim /etc/docker/daemon.json
  • 确认配置支持热加载 "live-restore": true。如果之前未配置,需要配置后重启docker
  • 增加日志限制
    • max-size: "1g":单个日志文件最大 1 GB
    • max-file: "10":最多保留 10 个日志文件
json 复制代码
{
  "live-restore": true,
  "insecure-registries": ["192.168.6.5:5000"],
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://registry.docker-cn.com"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "1g",
    "max-file": "10"
  }
}
  1. 热加载配置(需要预先配置 live-restore,并重启过docker)
bash 复制代码
systemctl reload docker
  1. 重建容器
  • 注意:只有重建后的容器才受到日志限制约束,所以必须销毁并重建容器
bash 复制代码
docker rm -f test-service
bash 复制代码
docker run -d --name test-service ..... 

情况2-构建缓存大

  1. 查看 Docker 整体磁盘使用情况
bash 复制代码
docker system df
# 查看更详细的版本,会列出所有容器、镜像等
#docker system df -v
bash 复制代码
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          7         2         1.693GB   1.431GB 
Containers      2         2         51.04MB   0B (0%)
Local Volumes   0         0         0B        0B
Build Cache     24        0         960B      147.3GB

快速解决-清理缓存

  1. 手动清除48小时以前创建的缓存
bash 复制代码
docker builder prune --filter until=48h -f
  1. 增加cron定时任务
  • 强制清除创建超过7天的缓存
  • 强制清理创建超过30天的系统垃圾
bash 复制代码
# 清理7天前创建的缓存
0 1 * * 0  docker builder prune --filter until=168h -f > /dev/null 2>&1
# 清理30天的创建或停止的镜像、网络、容器及缓存等
0 1 * * 6 /usr/bin/docker system prune -f --filter "until=720h" >> /dev/null 2>&1

长期解决-限制构建缓存大小

  1. 修改容器配置
bash 复制代码
vim /etc/docker/daemon.json
  • 增加构建缓存限制
    • "defaultKeepStorage": "20GB":限制 20GB
json 复制代码
{
  "live-restore": true,
  "insecure-registries": ["192.168.6.5:5000"],
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://registry.docker-cn.com"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "500m",
    "max-file": "5"
  },
  "builder": {
    "gc": {
      "enabled": true,
      "defaultKeepStorage": "20GB"
    }
  }
}
  1. 重启docker生效
bash 复制代码
systemctl restart docker
  1. 查看新策略自动清理结果
bash 复制代码
docker system df -v
相关推荐
仙柒4151 小时前
Docker 网络
运维·docker·容器
Harm灬小海1 小时前
【云计算学习之路】学习Centos7系统:服务搭建(NFS)
linux·运维·服务器·学习·云计算
Harm灬小海1 小时前
【云计算学习之路】学习Centos7系统-权限管理
linux·运维·服务器·学习·云计算
木雷坞1 小时前
vLLM 服务启动慢排查:NAS 模型目录、Docker 镜像和 GPU Runtime
docker·容器·vllm
xhbh6661 小时前
MC端口映射完全教程:路由器虚拟服务器配置+防火墙放行+内网穿透备用方案
运维·服务器·网络·网络协议·tcp/ip·智能路由器·流量端口转发
weixin_426150701 小时前
AI辅助Oracle容量规划:告别拍脑袋扩容
运维·数据库·人工智能·oracle
艾莉丝努力练剑1 小时前
【Linux网络】Linux 网络编程:HTTP(四)从手写服务器到生产级 Nginx 与 cpp-httplib 实战
linux·运维·服务器·网络·c++·nginx·http
@insist1231 小时前
信息安全工程师-安全实施:等保 2.0 框架、核心机制与运维体系
运维·安全·软考·信息安全工程师·软件水平考试
Harm灬小海2 小时前
【云计算学习之路】学习Centos7系统:Linux磁盘管理
linux·运维·服务器·学习·云计算