#docker #containers
#docker #контейнеры
Вопрос:
Мне нужно удалить серию открытых контейнеров, которые являются производными от изображения, которое я помечал много раз, поэтому у меня много версий. У меня также запущено множество контейнеров (которые оставались зависшими после различных тестов, которые я проводил с различными версиями контейнера).
Какие команды позволяют быстро удалить их все? (Т.Е. на основе имени изображения или чего-то еще)
Я обнаружил, что вы можете сделать
docker container stop $(docker container ls -aq --filter "ancestor=imagename")
Но это не работает с различными помеченными версиями (например, imagename: 1.0, imagename: 2.0)
итак, чтобы получить их все, мне пришлось использовать
docker container stop $(docker container ls -aq --limit 30)
Который получает контейнер, созданный до 1 месяца назад.
Prune просто очистил несколько из них.
Я не буду перечислять все команды, которые я пробовал.
Пожалуйста, скажите мне, какой самый быстрый и чистый способ очистить изображение и все последующие помеченные версии, а также связанные с ними соответствующие контейнеры, которые запущены или завершены.
Спасибо
Ответ №1:
Разве вы не можете просто использовать какую-нибудь магию Linux? Например
docker ps | grep <image-name> | awk '{ print $1 }' | xargs docker stop
Объяснение:
docker ps
показать запущенные контейнерыgrep <image-name>
выполните поиск по имени изображения в выводе предыдущей командыawk '{ print $1 }'
возьмите первый «столбец» (в данном случае идентификатор контейнера)xargs docker stop
передайте идентификаторы в docker stop
Аналогично, вы можете просто использовать другие команды bash для удаления контейнеров и удаления изображений:
docker ps -a | grep <image-name> | awk '{ print $1 }' | xargs docker container rm
docker image ls | grep <image-name> | awk '{ print $3 }' | xargs docker rmi
Небольшое предупреждение: grep не является специфичным для docker и будет фильтровать только на основе содержимого строки, поэтому, если имя вашего изображения появляется в именах контейнеров или где-либо еще, этот метод также остановит / удалит эти контейнеры!
Комментарии:
1. Да, я мог бы использовать это, если бы знал! Или, лучше сказать, я уже знал их, но я недостаточно опытен, чтобы собрать их вместе. Я постараюсь использовать это в качестве ответа, если это сработает для меня! Спасибо
2. Есть ли у нас что-то подобное в Windows?