Контейнеры чернослива Docker не использовались в последние X часов - PullRequest
0 голосов
/ 27 января 2019

Я хотел бы периодически очищать после Docker, так как я использую его довольно широко и имею много неиспользуемых изображений / томов.

Я знаю о существовании команды docker system prune, которая была бы почти тем, что мне нужно.Однако у меня есть несколько контейнеров, которые запускаются по расписанию и выходят практически сразу.Это некоторые сценарии обслуживания, которые запускаются один раз в час / один раз в день.Если я использую «стандартную» команду обрезки, они будут удалены и должны быть созданы заново.Я также обнаружил, что фильтр until= бесполезен в этом случае, так как контейнеры были созданы несколько месяцев назад, но используются ежедневно.

Есть ли способ сказать Docker, чтобы удалить все контейнеры, которые были закрыты болеечем X часов?Например, который может удалить все контейнеры, которые не использовались в последний день, например.

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 27 января 2019

Лучшим способом было бы использовать контейнерный оркестратор / расписание, вместо того, чтобы делать подобные вещи вручную.Например, вы можете использовать задания kubernetes cron.

https://kubernetes.io/docs/tasks/job/automated-tasks-with-cron-jobs/

0 голосов
/ 27 января 2019

Я не могу придумать, как это сделать командой prune.Но как насчет перечисления всех вышедших контейнеров в формате json, выбора тех, которые вышли из «дня» или «месяца» назад с помощью jq, а затем их удаления?

docker container ls -a --filter 'status=exited' --format '{{ json . }}' \
| jq --slurp --raw-output '.[] | select(.Status | contains("day") or contains("month")) | .ID' \
| xargs docker container rm

Обратите внимание, что просто удаляются вышедшие контейнерыне будет охватывать их в других не запущенных состояниях.Возможные состояния: created, restarting, running, removing, paused, exited и dead.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...