最近X个小时未使用的Docker修剪容器

时间:2019-01-27 14:21:49

标签: docker

我想在Docker之后定期清理,因为我使用它非常广泛,并且有很多未使用的映像/卷。

我知道docker system prune命令的存在,这几乎是我所需要的。但是,我有一些容器正在按计划运行,并且几乎立即退出。它们是一些维护脚本,每小时/每天运行一次。如果我使用“标准”修剪命令,它们将被删除并且必须重新创建。我还发现until=过滤器在这种情况下没有用,因为容器是几个月前创建的,但每天都会使用。

是否有一种方法可以告诉Docker删除X个小时以上退出的所有容器?例如,这可以删除前一天未使用的所有容器。

预先感谢

2 个答案:

答案 0 :(得分:0)

我想不出一种使用prune命令的方法。但是,如何以json格式列出所有退出的容器,选择jq在“ day”或“ month”之前退出的容器,然后将其删除?

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

请注意,仅删除已退出的容器不会覆盖其他非运行状态的容器。可能的状态为createdrestartingrunningremovingpausedexiteddead

答案 1 :(得分:0)

最好的方法是使用容器编排器/时间表,而不是手动执行此类操作。例如,您可以使用kubernetes cron作业。

https://kubernetes.io/docs/tasks/job/automated-tasks-with-cron-jobs/