如何清理Docker不用的Volume

有一句老话叫:书到用时方恨少。

其实电脑的内存空间也是非常宝贵,特别是MacOS下的docker可以分配的空间更是寸土寸金。

在21年的时候我也遇到过类似的问题,当时的经历记录在这篇博客:https://www.cnblogs.com/freephp/p/14864570.html

然而在长时间的docker使用中,我发现光是这种程度的空间清理是不够的。定期执行prune命令,依然还是耗尽了最后的分配给docker磁盘空间。直到有一天我再也无法顺利启动我的数据库容器,我才发现空间已经只剩10MB。

于是我反复尝试和思考, 发现有很多被使用到的Volume并没有因为容器停止或者删除而释放出空间,这才是吞噬磁盘空间的罪魁祸首。

基本思考就是:

先找到没被使用的volumes,然后用命令删除这些volumes。

最开始我是想用bash去执行docker命令实现,但是为了更好的扩展性和代码可读性,我选择用python的docker库去实现。具体如下所示。

复制代码
import docker

# Create a Docker client
client = docker.from_env()

# List all unused volumes
unused_volumes = client.volumes.list(filters={"dangling": True})

# Print out the unused volumes
for volume in unused_volumes:
    print(f"Removing volume: {volume.name}")

# Remove each unused volume
for volume in unused_volumes:
    try:
        volume.remove()
        print(f"Successfully removed volume: {volume.name}")
    except Exception as e:
        print(f"Error removing volume {volume.name}: {e}")

# Clean up and close the client
client.close()
相关推荐
wydd99_lll15 小时前
docker特权模式下逃逸
运维·docker·容器
mseaspring16 小时前
一款用于监控跨多台主机 Docker 容器的实时终端
运维·docker·容器
SPC的存折20 小时前
6、Docker常用配置
运维·docker·容器
图图玩ai21 小时前
SSH 命令管理工具怎么选?从命令收藏到批量执行一次讲清
linux·nginx·docker·ai·程序员·ssh·可视化·gmssh·批量命令执行
SPC的存折1 天前
4、Docker私有仓库
运维·docker·容器
齐潇宇1 天前
Docker概述与安装
linux·运维·docker·容器
亚空间仓鼠1 天前
Docker 容器技术入门与实践 (二):Dockerfile文件
运维·docker·容器
亚空间仓鼠1 天前
Docker 容器技术入门与实践 (一):命令与镜像、容器管理
运维·docker·容器
东北甜妹1 天前
Docker 多阶段构建
运维·docker·容器
Zhu7581 天前
【软件部署】docker环境部署nagios
运维·docker·容器