Я хочу видалити всі версії зображень докера з іменами, що містять заданий рядок ( imagename
).
Я спробував нижче, але, здається, це не працює:
docker images | grep 'imagename' | xargs -I {} docker rmi
Я хочу видалити всі версії зображень докера з іменами, що містять заданий рядок ( imagename
).
Я спробував нижче, але, здається, це не працює:
docker images | grep 'imagename' | xargs -I {} docker rmi
Відповіді:
Спробуйте наступне:
docker rmi $(docker images |grep 'imagename')
Windows Powershell:
docker rmi $(docker images --format "{{.Repository}}:{{.Tag}}"|findstr "imagename")
docker images |grep 'imagename'
Трохи точніша версія - grepping лише на ім'я сховища:
docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')
docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')
docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')
docker images --format '{{.Repository}}:{{.Tag}}
фільтрує вихідні дані, так що відображаються лише repo & tag (тобто foo:latest
). grep 'imagename
фільтрує ці рядки лише до тих зображень, які містять imagename
. Поміщаючи це в $()
обчислює, що & передає до зовнішнього, docker rmi
який видаляє ті зображення, які були зіставлені.
docker rmi -f $(docker images --format '{{.Repository}}:{{.Tag}}' --filter=reference='imagename:*')'
docker rmi $( docker images --format '{{.Repository}}:{{.Tag}}' | Select-String -Pattern 'imagename')
docker images
фактично використовує перший позиційний аргумент як ім'я зображення для фільтрації. Не потрібні grep та awk. -q
Варіант буде повертати тільки ідентифікатори відповідних зображень , які можуть бути подані в docker rmi
.
docker rmi --force $(docker images -q 'imagename' | uniq)
uniq
Потрібно видалити дублікати, в разі , якщо у вас є те ж саме зображення позначені по- різному.
Просто ви можете додати --force
в кінці команди. Люблю:
sudo docker rmi <docker_image_id> --force
Щоб зробити його більш розумним, ви можете зупинити будь-який запущений контейнер перед тим, як видалити зображення:
sudo docker stop $(docker ps | grep <your_container_name> | awk '{print $1}')
sudo docker rm $(docker ps | grep <your_container_name> | awk '{print $1}')
sudo docker rmi $(docker images | grep <your_image_name> | awk '{print $3}') --force
В docker ps
, $ 1 є першою колонці тобто докер контейнер ID і $ 3 є третій колонці тобто докер ідентифікатор зображення
Я вважаю, що моя відповідь простіша.
Наприклад, ваше ім’я зображення python_image
.
Тоді ваш код повинен бути :
docker rmi $(docker images --filter=reference='python_image' --format "{{.ID}}")
Сподіваюся, це допоможе.
Я також отримав ще одну стислу відповідь. Єдиною зміною було видалення непотрібного -I {}
прапора.
docker images | grep 'imagename' | xargs docker rmi
docker rmi `docker images | awk '$1 ~ /imageName/ {print $3}'`
Це призведе до видалення всіх зображень із назвою "imageName". У деяких випадках це може спричинити помилку, як-от "зображення посилається в одному або декількох сховищах". У цьому випадку застосовуйте примусове видалення.
docker rmi -f `docker images | awk '$1 ~ /imageName/ {print $3}'`
Іншим способом може бути:
docker images | awk '{ OFS = ":" }$1 ~ /imageName/ {print $1,$2}'
З якихось причин я не зміг використати жодної з поданих відповідей тут. Ось, що мені вдалося.
docker images | grep \"gcr.io/kubernetes-learn-197422/last-week-weather-service\" | awk '{print $3}' | xargs docker rmi
awk '{print $3}'
є важливою частиною. Він витягує ідентифікатор з 3-го стовпця.
Для мене працював ( версія Docker 19.03.5 ):
docker rmi $(docker images 'imagename' -q)
Команда " docker images 'imagename' -q " перелічить всі ідентифікатори зображень одного цитованого аргументу, тому, об'єднавши його з docker rmi (або docker rmi -f для примусу), вона видалить всі зображення з вибраним ім'ям
Незначне зауваження: З того, що ми відчуваємо, здається, ви - з докера 18.03 - більше не можете видаляти не позначені зображення лише на основі назви. Вам потрібно використовувати ім’я + тег, як зазначено вище, або використовувати ідентифікатор.
docker images --format={{.ID}} | xargs -I % sh -c 'docker rmi --force % 2>&1'
docker rmi $(docker images --filter=reference="IMAGENAME:TAG")
наприклад, якщо у мене є такі зображення
REPOSITORY TAG IMAGE ID CREATED SIZE
abcdefg/hij 7.0.0-beta-4.0 3128835950cd 7 days ago 51.4MB
abcdefg/hij-action 7.0.0-beta-4.0 42a7255beb74 7 days ago 97.4MB
abcdefg/hij-test 7.0.0-beta-4.0 17246aed35d0 7 days ago 97.4MB
abcdefg/hij-server 7.0.0-beta-4.0 42c45e561f2c 7 days ago 335MB
abcdefg/hij-init 7.0.0-beta-3.0 f648bb622933 7 days ago 55.2MB
abcdefg/hij-dir 7.0.0-beta-3.0 0db07d3aaccf 7 days ago 97.4MB
abcdefg/hij-mount 7.0.0-beta-3.0 18d1c0e1502c 4 weeks ago 33.7MB
Потім docker rmi $(docker images --filter=reference="abcd*:*4.0")
буде видалено перші чотири зображення.
Додаткову інформацію див. На https://docs.docker.com/engine/reference/commandline/images/
docker rmi $(docker images -q --filter=reference="IMAGENAME:TAG")
Складіть рішення цього питання для задоволення моїх потреб, яке раніше не публікувалось.
Я хотів , щоб відповідати локально вбудованим зображенням: library/myapp
що я перейменував, позначений, і підштовхнув до приватного репо: myrepo.org/library/myapp
. Після того, як їх виштовхнуть, я хочу очистити місцевий реєстр докерів.
І мені байдуже, якщо нічого не знайдено або команда видасть помилку. Таким чином додано || true
в кінці для включення в скрипти.
docker rmi $(docker image ls */library/myApp --format '{{.Repository}}:{{.Tag}}') || true
Спираючись на відповідь @ Aditya, ви також можете створити функцію bash для легкого видалення зображень. Покладіть цю функцію на ваш ~/.profile
. Створіть новий сеанс оболонки або отримайте його за допомогою source ~/.profile
.
function drmi() {
docker images | grep $1 | xargs docker rmi
}
Використання:
drmi golang
Інформаційне:
docker rmi $(docker images --format "{{.Repository}}:{{.Tag}}" |grep imagename |grep none)
Дайте цю помилку:
Відповідь помилки від демона: недійсний формат посилання
Можливо тому, що мої зображення виглядають так:
hostname:5000/imagename:<none>
Мені довелося використати ідентифікатор зображення та виконати цю команду:
docker rmi `docker images --format "{{.Repository}}:{{.Tag}} {{.ID}}" |grep imagename |grep none |cut -d ' ' -f2`
Щоб видалити контейнери, що вийшли:
docker container rm `docker container ls -a --format "{{.ID}} {{.Image}} {{.Status}}" |grep Exited |grep imagename|cut -d ' ' -f1`