linux – 查找并杀死超过1天的所有docker实例

我需要运行一个命令

 docker ps -a 

列表说:

id    name   time
1      abc    6 weeks ago

要杀死我们需要触发命令:

docker kill id

我需要找到所有ID并在每个超过1天的id上运行kill命令.我怎样才能做到这一点?

最佳答案
一些docker命令提供了使用go模板调整输出格式的可能性.因此,我们可以使用该机制来获取更容易处理的正在运行的容器的开始时间.

例如:

docker ps --format='{{.ID}}' \
  | xargs -n 1 -r docker inspect \
                           -f '{{.ID}} {{.State.Running}} {{.State.StartedAt}}' \
  | awk '$2 == "true" && $3 <= "'$(date -d 'yesterday' -Ins --utc \
                                     | sed 's/+0000/Z/')'" { print $1 }' \
  | xargs -r docker kill

我们在这里假设GNU xargs – -r选项指示xargs仅在至少有一个参数时才执行命令.我们还依赖于GNU日期 – 目标是获取昨天的日期时间 – 采用带有Zulu时间后缀的ISO格式 – 这样它就与内部docker日期格式兼容.因此,可以使用正常的字符串比较来比较两个日期,因为该日期格式的词法排序与日期排序相匹配.

ps docker命令没有设置-a选项,因为默认情况下,docker ps只显示正在运行的容器 – 我们只需要查看正在运行的容器进行查杀.

如果您定义了docker命令别名(例如别名docker =’sudo /usr/bin/docker’),则必须在该管道中将docker替换为sudo /usr/bin/docker.

转载注明原文:linux – 查找并杀死超过1天的所有docker实例 - 代码日志