2017-01-21 4 views
1

Я хотел бы создать задание cron, которое остановило бы контейнеры Docker, если они работают больше, чем, скажем, 2 часа.Остановите контейнер Docker, который работает некоторое время

Я могу получить время, которое они начали.

$ 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

В чем ваш вопрос? – Travis

ответ

0

Это обсуждалось, как только в 2013 году в issue 1905

Баш альтернатива была:

#!/bin/bash 
set -e 

to=$1 
shift 

cont=$(docker run -d "[email protected]") 
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 

Note, с грузчиком 1.13, вы могли бы работать с --rm -d (см. PR 20848).

Смежные вопросы