найти и убить все экземпляры докеров старше 1 дня

Мне нужно запустить команду

docker ps -a 

в котором перечислены списки:

 id name time 1 abc 6 weeks ago 

Чтобы убить, нам нужно запустить команду:

 docker kill id 

Мне нужно найти все идентификаторы и запустить команду kill для каждого идентификатора старше 1 дня. Как я могу это сделать?

Некоторые команды докеров обеспечивают возможность настройки формата вывода с использованием шаблона 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 выполнять только команду, если есть хотя бы один аргумент. Мы также полагаемся на date GNU – цель состоит в том, чтобы получить дату дня + время – в формате ISO с суффиксом времени Zulu – чтобы он был совместим с форматом даты внутреннего докера. Таким образом, обе даты можно сравнить, используя обычное сравнение строк, поскольку лексикографическое упорядочение этого формата даты соответствует порядку даты.

Команда ps docker не имеет опции -a потому что по умолчанию docker ps показывает только запущенные контейнеры, и нам нужно всего лишь просмотреть запущенные для убийства.

Если у вас установлен псевдоним команды docker (например, alias docker='sudo /usr/bin/docker' ), вы должны заменить docker sudo /usr/bin/docker в этом канале.