清理 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路径,即可确定是哪个容器。