我需要运行一个命令
docker ps -a
其中列出了:
id name time
1 abc 6 weeks ago
要杀死我们需要触发命令:
docker kill id
我需要找到所有 id 并对每个早于 1 天的 id 运行kill命令。我怎样才能做到这一点?
答案1
一些 docker 命令提供了使用 go template 调整输出格式的可能性。因此,我们可以使用该机制来获取更容易处理的正在运行的容器的启动时间。
例如:
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 date
- 目标是获取昨天的日期+时间 - 采用带有 Zulu 时间后缀的 ISO 格式 - 以便它与内部 docker 日期格式兼容。因此,可以使用普通字符串比较来比较两个日期,因为该日期格式的字典顺序与日期顺序相匹配。
docker命令ps
没有-a
设置选项,因为默认情况下,docker ps
只显示正在运行的容器 - 我们只需要查看正在运行的容器即可杀死。
如果您定义了 docker 命令别名(例如alias docker='sudo /usr/bin/docker'
),则必须在该管道中替换docker
为。sudo /usr/bin/docker