我想在Docker之后定期清理,因为我使用它非常广泛,并且有很多未使用的映像/卷。
我知道docker system prune
命令的存在,这几乎是我所需要的。但是,我有一些容器正在按计划运行,并且几乎立即退出。它们是一些维护脚本,每小时/每天运行一次。如果我使用“标准”修剪命令,它们将被删除并且必须重新创建。我还发现until=
过滤器在这种情况下没有用,因为容器是几个月前创建的,但每天都会使用。
是否有一种方法可以告诉Docker删除X个小时以上退出的所有容器?例如,这可以删除前一天未使用的所有容器。
预先感谢
答案 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
请注意,仅删除已退出的容器不会覆盖其他非运行状态的容器。可能的状态为created
,restarting
,running
,removing
,paused
,exited
和dead
。
答案 1 :(得分:0)
最好的方法是使用容器编排器/时间表,而不是手动执行此类操作。例如,您可以使用kubernetes cron作业。
https://kubernetes.io/docs/tasks/job/automated-tasks-with-cron-jobs/