我想定期清理Docker之后,因为我使用它相当广泛,有很多未使用的图像/卷。
我知道存在的 docker system prune 命令,这几乎是我需要的。但是,我有几个容器按计划运行,几乎立即退出。它们是一些每小时/每天运行一次的维护脚本。如果我使用'standard'prune命令,它们将被删除,必须重新创建。我还发现了 until= 在这种情况下,过滤器是无用的,因为容器是几个月前创建的,但每天都在使用。
docker system prune
until=
有没有什么方法可以告诉用户删除所有超过X小时的容器?例如,它可以删除最后一天没有使用的所有容器。
提前谢谢
最好的方法是使用容器编排器/调度器,而不是手动执行类似的操作。例如,可以使用kubernetes cron jobs。
https://kubernetes.io/docs/tasks/job/automated-tasks-with-cron-jobs/
我想不出用prune命令做这件事的方法。但是,如何用JSON格式列出所有退出的容器,选择那些用JQ退出“天”或“月”的容器,然后删除它们?
docker container ls -a --filter 'status=exited' --format '{{ json . }}' \ | jq --slurp --raw-output '.[] | select(.Status | contains("day") or contains("month")) | .ID' \ | xargs docker container rm
注意,删除退出的容器不会覆盖其他非运行状态的容器。可能的状态是 created ,请 restarting 我是说, running , removing 我是说, paused 我是说, exited ,和 dead .
created
restarting
running
removing
paused
exited
dead