如何修剪旧的docker图像,但只为选定的容器?

abithluo  于 2023-01-25  发布在  Docker
关注(0)|答案(1)|浏览(145)

我们知道docker image prune有一个--filter参数,可以用来选择(和删除)超过给定小时数的图像(例如--filter "until=7*24h")。
我们还知道docker images有一个类似的--filter参数,它支持before键(例如docker images --filter "before=ubuntu:22.04"),但只能过滤在给定图像或引用(不是日期)之前创建的图像。
但是如上所述的修剪将适用于 * 所有 * 容器,这太宽泛了。如果我们想更有选择性地修剪“旧”图像,将修剪限制在仅单个容器的图像上(例如,为了备用旧的基本容器等),该怎么办?

aelbi1ox

aelbi1ox1#

我想到了一个看起来很丑,但显然相当有效的方法。
下面的示例将(强制)删除mirekphd/ml-cache容器中2周(此实现适用的最短时间段-但可以调整为任何时间段)之前的所有映像(注意:作为特殊情况,它可以移除该容器的所有图像):

$ MAX_WEEK_NUM=2 && REPO=mirekphd && CONTAINER=ml-cache && docker images --format "{{.ID}} {{.CreatedSince}}" --filter=reference="$REPO/$CONTAINER" | grep "[$MAX_WEEK_NUM-9999] weeks\|[1-999] months\|[1-99] years" | awk '{print $1}' | xargs docker rmi -f

相关问题