Я недавно начал использовать Docker и никогда не понимал, что мне следует использовать docker-compose down вместо ctrl-c или docker-compose stop, чтобы избавиться моих экспериментов. Теперь у меня локально большое количество ненужных образов докеров.

Есть ли флаг, который я могу запустить, чтобы удалить все локальные образы и контейнеры докеров?

Что-то вроде docker rmi --all --force --all не существует, но я ищу что-то с похожей идеей.

Kimmo Hintikka

Ответов: 21

Ответы (21)

Для Unix

Для удаления всех контейнеров, включая его тома, используйте

docker rm -vf $(docker ps -aq)

Чтобы удалить все изображения,

docker rmi -f $(docker images -aq)

Помните, вы должны удалить все контейнеры перед удалением всех образов, из которых эти контейнеры были созданы.

Для Windows

Если вы работаете в Windows (Powershell),

$images = docker images -a -q
foreach ($image in $images) { docker image rm $image -f }

На основе комментария CodeSix, одного лайнера для Windows Powershell,

docker images -a -q | % { docker image rm $_ -f }

Для Windows с использованием командной строки

for /F %i in ('docker images -a -q') do docker rmi -f %i
docker rmi $ (образы докеров -q) --force

Можно попробовать так:

docker system prune

Если вам нужно удалить без вызова докера:

rm -rf /var/lib/docker

Это напрямую удаляет все образы / контейнеры / тома докеров из файловой системы.

удаление образа докера -a

Удалите все неиспользуемые изображения, а не только болтающиеся. Добавьте параметр -f в сила.

Версия локального докера: 17.09.0-ce, Git commit: afdb6d4, OS / Arch: darwin / amd64

$ docker image prune -h
Flag shorthand -h has been deprecated, please use --help

Usage:  docker image prune [OPTIONS]

Remove unused images

Options:
  -a, --all             Remove all unused images, not just dangling ones
      --filter filter   Provide filter values (e.g. 'until=')
  -f, --force           Do not prompt for confirmation
      --help            Print usage

Вот команда, которую я использовал и поместил ее в командный файл, чтобы удалить все:

echo "Удаление контейнеров:" && if [-n "$ (docker container ls -aq)" ]; затем docker container stop $ (docker container ls -aq); докер контейнер rm $ (docker container ls -aq); fi; echo "Удаление изображений:" && если [-n "$ (изображения докеров -aq)"]; затем docker rmi -f $ (docker images -aq); fi; echo "Удаление томов:" && if [-n "$ (docker volume ls -q) "]; затем docker volume rm $ (docker volume ls -q); fi; echo "Удаление сетей:" && if [-n "$ (docker network ls | awk '{print $ 1 "" $ 2} '| grep -v 'ID | bridge | host | none' | awk '{print $ 1}') "]; затем docker network rm $ (docker network ls | awk '{print $ 1 "" $ 2}' | grep -v 'ID | bridge | host | none' | awk '{print $ 1}'); fi;

Используйте это, чтобы удалить все:

docker system prune -a --volumes

Удалить все неиспользуемые контейнеры, тома, сети и образы

WARNING! This will remove:
    - all stopped containers
    - all networks not used by at least one container
    - all volumes not used by at least one container
    - all images without at least one container associated to them
    - all build cache

https://docs.docker.com/engine/reference/commandline/system_prune/#extended-описание

Чтобы удалить все изображения:

docker rmi -f $(docker images -a | awk {'print $3'})

Пояснение:

docker images -a | awk {'print $ 3'}

Эта команда вернет все идентификаторы изображения, а затем используется для удаления изображения по его идентификатору.

Простые и удобные команды

Для удаления всех изображений

docker rmi $(docker images -a)

Удалить контейнеры, находящиеся в закрытом состоянии

docker rm $(docker ps -a -f status=exited -q)

Удалить контейнеры, находящиеся в состоянии создания

docker rm $(docker ps -a -f status=created -q)

ПРИМЕЧАНИЕ: Удалите все контейнеры, затем удалите изображения

Другой способ с xargs (только Unix)

docker image ls -q | xargs -I {} docker image rm -f {}
  1. sudo docker images / docker images // список изображений с идентификатором
  2. sudo docker rm image / docker rm image

Добавление к принятому ответу techtabu. Если вы используете докер в Windows, вы можете использовать следующую команду

для / F "delims ="% A in ('docker ps -a -q') do docker rm% A

здесь команда docker ps -a -q перечисляет все изображения, и этот список передается docker rm один за другим

см. this для получения более подробной информации о том, как этот тип формата команд работает в Windows cmd.

Вот краткое и быстрое решение, которое я использовал

Docker предоставляет одну команду, которая очищает любые ресурсы - образы, контейнеры, тома и сети - которые висячие (не связанные с контейнером):

docker system prune

Чтобы дополнительно удалить все остановленные контейнеры и все неиспользуемые изображения (а не только висячие изображения), добавьте к команде флаг -a:

docker system prune -a


Подробности на ссылка

docker rmi -f $(docker images -q)

образ докера rm -f $ (образ докера ls -a -q)

Другие ответы, похоже, не предоставляют простой способ удалить только контейнеры с «автоматически сгенерированными» именами. Это мое самое частое намерение, поэтому я написал для него сценарий Powershell:

$containers = (docker container list -a).Split("`n") | % { [regex]::split($_, "\s+") | Select -Last 1 }
$containersToRemove = $containers | Where { ([regex]"^[a-z]+_[a-z]+$").IsMatch($_) }

# it's recommended to delete in batches, as too many at once can cause issues
$containersToRemove = $containersToRemove | Select-Object -First 30

foreach ($container in $containersToRemove) {
    # sync/wait-based version (slow)
    # docker container rm $container

    # async/background-process version (fast)
    Start-Process -FilePath docker -ArgumentList "container rm $container" -NoNewWindow
}

Конечно, будьте осторожны, так как этот скрипт просто использует регулярное выражение: ^ [a-z] + _ [a-z] + $

Поэтому используйте его только в том случае, если вы знаете, что контейнеры, о которых вы заботитесь, не используют один и тот же формат (строчные слова, подчеркивания, строчные слова); или, по крайней мере, запустите только первые две строки, запустите echo $ containerToRemoveи проверьте список перед фактическим выполнением удаления.

Список изображений

docker image ls

Удалить неиспользуемые изображения

docker image prune --all

Для дополнительного удаления остановленных контейнеров и всех неиспользуемых образов

docker system prune -a

узнать больше

Существует ошибка в Windows, при которой дисковое пространство не освобождается после удаления образов. Перезагрузка Docker / Windows не сработала.

Если вы используете Docker Desktop, , следующий за, работал у меня. Перейдите в Устранение неполадок -> Очистить / очистить данные. Это может сэкономить вам много места на диске, может быть, больше, чем вы хотели.

enter image description here

Обратите внимание: это удаляет все, так что подумайте дважды, прежде чем делать это!

Для пользователя Linux Ubuntu у меня сработало следующее. Предупреждение - он удалит все попутно.

Для удаления контейнеров и связанных с ними томов используйте следующее:

sudo docker rm -vf $(sudo docker ps -a -q)

Для удаления изображений используйте ниже:

sudo docker rmi -f $(sudo docker images -a -q)

Чтобы удалить все изображения:

docker rmi $(docker images -a -q)

где -a - все, а -q - возвращать только идентификаторы изображений

Для удаления неиспользуемых изображений и контейнеров:

docker system prune

будьте осторожны, если вы используете docker swarm, и ваша локальная машина присоединяется к удаленному swarm (как менеджер / рабочий), ваш локальный будет развернутым репо. выполнение, таким образом, удаляет развернутые образы.

Чтобы удалить все локальные образы Docker Docker, выполните 2 шага:

шаг 1: образы докеров (перечислить все образы докеров с идентификаторами)

     example :
     REPOSITORY    TAG    IMAGE ID            CREATED             SIZE
     pradip564/my  latest 31e522c6cfe4        3 months ago        915MB

шаг 2: образ докера rm 31e522c6cfe4 (ID ИЗОБРАЖЕНИЯ)

      OUTPUT : image deleted

2022 WebDevInsider