家里自己部署docker服务的虚拟机磁盘报警了,发现是一个容器打日志太多导致的,业务也不重要就删除了,之后发现容量依然占用很高(超过50%):

image.png

用du命令调查了大文件:

[root@bogon docker]# pwd
/var/lib/docker
[root@bogon docker]# du -h --max-depth=1
21M     ./containers
0       ./plugins
16G     ./overlay2
23M     ./image
24K     ./volumes
0       ./trust
116K    ./network
0       ./swarm
0       ./tmp
0       ./runtimes
1.5M    ./buildkit
16G     .

发现docker的overlay2文件夹占用太大,里面可能有很多未使用的镜像和构建缓存,清理方法如下:

  1. 删除未使用的容器、镜像、卷和网络:
    使用 docker system prune 命令可以清理未使用的资源。添加 -a 参数可以删除未被任何容器引用的镜像。

    docker system prune -a
    

    要仅清理特定类型的资源,请使用以下命令之一:

    docker container prune
    docker image prune
    docker volume prune
    docker network prune
    
  2. 删除特定容器、镜像或卷:
    你可以使用 docker rmdocker rmidocker volume rm 命令删除特定的容器、镜像或卷。

    docker rm <container_id>
    docker rmi <image_id>
    docker volume rm <volume_name>
    
  3. 清理未挂载的卷:
    你可以使用 docker volume ls -qf dangling=true 列出未挂载的卷,然后使用 xargs 删除它们。

    docker volume ls -qf dangling=true | xargs docker volume rm
    
  4. 清理特定标签的镜像:
    如果你想删除特定标签的镜像,可以使用 docker images 命令列出所有镜像,然后使用 grep 筛选特定标签的镜像,并使用 xargs 删除它们。

    docker images | grep '<your_tag>' | awk '{print $3}' | xargs docker rmi
    

完成清理后,可以再次检查 /var/lib/docker/overlay2 文件夹,已清理的空间应该已经释放。