停止正在运行一段时间的Docker容器

我想创build一个cron作业来阻止Docker容器,如果它们的运行时间超过了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脚本?

这一点在1905年即将到来的2013年进行了讨论

bash的替代scheme是:

 #!/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 

请注意,使用--rm -d 1.13,您可以使用--rm -d (请参阅PR 20848 )来运行。