我想创建一个可以阻止Docker容器的cron作业,如果它们的运行时间超过2小时。
我可以得到他们开始的时间。
$ docker inspect -f '{{ .State.StartedAt }}' $(docker ps -q)
只需要将它与2小时前进行比较......
$ date --utc --date="-2 hours" +"%Y-%m-%dT%H:%M:%S.%NZ"
...如果它早点停止容器
$ docker stop <<container_id>>
如何使用bash脚本执行此操作?
答案 0 :(得分:1)
2013年在issue 1905
中对此进行了讨论bash替代方案是:
#!/bin/bash
set -e
to=$1
shift
cont=$(docker run -d "$@")
code=$(timeout "$to" docker wait "$cont" || true)
docker kill $cont &> /dev/null
echo -n 'status: '
if [ -z "$code" ]; then
echo timeout
else
echo exited: $code
fi
echo output:
# pipe to sed simply for pretty nice indentation
docker logs $cont | sed 's/^/\t/'
使用:
$ docker-run-timeout.sh 10s busybox sh -c 'echo start && sleep 30 && echo finish'
status: timeout
output:
start
注意,使用泊坞窗1.13,您可以使用--rm -d
运行(请参阅PR 20848)。
答案 1 :(得分:1)
这是一个旧主题,但是如果有人正在寻找答案,还是这样。以下命令将停止运行超过2小时的容器。
docker ps --format="{{.RunningFor}} {{.Names}}" | grep hours | awk -F: '{if($1>2)print$1}' | awk ' {print $4} ' | xargs docker stop
说明:
docker ps --format="{{.RunningFor}} {{.Names}}"
将打印容器名称和运行时间。
grep hours
将打印运行数小时的容器。
awk -F: '{if($1>2)print$1}'
仅会打印运行2小时以上的容器。
awk ' {print $4} ' | xargs docker stop
将打印从先前输出获得的容器名称,并将其作为参数传递以停止容器。
答案 2 :(得分:1)
@Siru 的单线很棒,但是我必须更改以下部分才能正确找到超过两位数天数的容器:
awk -F " " '{if($1>14)print$0}'