tanger
发布于 2024-03-19 / 2 阅读 / 0 评论 / 0 点赞

清理 docker 占用磁盘过大问题

清理 docker 占用磁盘过大问题

清理方案

1. 由于是根磁盘所以第一件事情是清理磁盘的其它文件,比如日志,不要的文件 

find / -size +1G -type file

通过这个命令找打文件大 且多的不要文件,然后一一删除掉。

2. 在第一步清理之后开始清理docker 日志文件

echo "======== start clean docker containers logs ========"
logs=$(find /var/lib/docker/containers/ -name *-json.log)
for log in $logs
        do
                echo "clean logs : $log"
                cat /dev/null > $log
        done
echo "======== end clean docker containers logs ========"

3. 清理docker tmp 文件 目录在/var/lib/docker/tmp ,接下来怎么做你懂的。

4. 清理dockers 系统的文件 比如 镜像 和 卷,执行下面两个命令

docker system prune -a 
 
docker volume prune 

5. 解决上面提到的问题(overlay2 占用磁盘过大不释放),在容器/etc/docker/daemon.json 添加如下代码

{
"log-opts": {
    "max-size": "10m",
    "max-file": "3"
    },
  "storage-driver": "overlay2",
  "storage-opts": [
         "overlay2.override_kernel_check=1"
   ]
}

6. 有可能是nexus 或者gitlab 或者harbor 这类的连接占磁盘 所有在做上面步骤之前可以先停一下。

补充:还有一种情况 overlay2 目录过大 ,没有挂卷 导致docker runtime 文件持续写入,在宿主机看到overlay2 某个目录特别大, 请参考以下

首先进入到 /var/lib/docker/overlay2 目录下,查看谁占用的较多

du -s ./* | sort -rn | more

如图所示,占用空间最大的目录为bff25099a59b0fc8addd06f9223872f2904256f0432b3c3c47b58faef167115f

2.再通过目录名查找容器名

docker ps -q | xargs docker inspect --format '{{.State.Pid}}, {{.Id}}, {{.Name}}, {{.GraphDriver.Data.WorkDir}}' | grep bff25099a59b0fc8addd06f9223872f2904256f0432b3c3c47b58faef167115f


1648, e5753a9541745e7a5aff85b2d0c2394f8d88d854aabe7a72b942fab81ff6f26f, /k8s_graceful_graceful-7b54cc8f66-9zb79_yce_bae9c98f-f329-4d30-848e-9bb8da14df25_0, /var/lib/docker/overlay2/bff25099a59b0fc8addd06f9223872f2904256f0432b3c3c47b58faef167115f/work

输出依次为,进程pid、容器ID、容器名、存储work路径,即可确定是哪个容器。


评论