Как удалить изображения Docker?

У меня есть следующие изображения:

[email protected]:~$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
<none>              <none>              70c0e19168cf        5 days ago          1.069 GB
<none>              <none>              c2ce80b62174        8 days ago          399.2 MB
<none>              <none>              60afe4036d97        8 days ago          325.1 MB

и когда я пытаюсь удалить один из них, я получаю:

[email protected]:~$ sudo docker rmi 60afe4036d97
Error: Conflict, 60afe4036d97 wasn't deleted
2014/01/28 00:54:00 Error: failed to remove one or more images

Как я могу их удалить? Почему существует такой конфликт?

Ответ 1

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

docker rmi $(docker images -q)

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

docker rm $(docker ps -a -q)

Предупреждение. Это уничтожит все ваши изображения и контейнеры. Восстановить их не удастся!

Это решение предоставляется Techoverflow.net.

Ответ 2

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

docker ps
docker stop <containerid>
docker rm <containerid>
docker rmi <imageid>

Если вы не можете найти контейнер docker ps, вы можете использовать его для отображения всех уже выведенных контейнеров и их удаления.

docker ps -a | grep 60afe4036d97
docker rm <containerid>

Примечание. Будьте осторожны при удалении всех выведенных контейнеров сразу, если вы используете контейнеры Volume-Only. Они остаются в состоянии Exit, но содержат полезные данные.

Ответ 3

Причиной ошибки является то, что хотя изображение не имело никакого тега, на этом изображении все еще существует контейнер, который может находиться в состоянии exited. Поэтому вам необходимо убедиться, что вы остановили и удалили все контейнеры, созданные на этих изображениях. Следующая команда позволяет удалить все контейнеры, которые не запущены:

docker rm `docker ps -aq --no-trunc --filter "status=exited"`

Теперь это удаляет все оборванные немесячные изображения <none>:

docker rmi `docker images --filter 'dangling=true' -q --no-trunc`

Примечание. Чтобы остановить все запущенные контейнеры:

docker stop `docker ps -q`

Ответ 4

в bash:

for i in `sudo docker images|grep \<none\>|awk '{print $3}'`;do sudo docker rmi $i;done

это приведет к удалению всех изображений с именем "". Я нашел эти изображения лишними.

Ответ 5

В настоящее время изображение может использоваться запущенным контейнером, поэтому сначала нужно остановить и удалить контейнер (ы).

docker stop <container-name>
docker rm <container-id>

Затем вы можете попробовать удалить изображение:

docker rmi <image-id>

Вы должны быть уверены, что это изображение не зависит от других изображений (в противном случае вы должны сначала удалить их).

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

Чтобы решить эти особые случаи, вы можете принудительно удалить изображение:

docker rmi -f <image-id>

Ответ 6

Я нашел ответ в этой команде:

docker images --no-trunc | grep none | awk '{print $3}' | xargs docker rmi

У меня возникла ваша проблема, когда я удалил некоторые изображения, которые были использованы, и я не понял (используя docker ps -a).

Ответ 7

Сначала удалите все контейнеры, используя следующую команду

sudo docker ps -a -q | xargs -n 1 -I {} sudo docker rm {}

Затем удалите изображение по его идентификатору, используя следующую команду

sudo docker rmi <image-id>

Ответ 8

Удалить все контейнеры

docker ps -q -a | xargs docker rm

Сила Удалить все изображения докеров

docker rmi -f $(docker images -f dangling=true -q)

Ответ 9

Так как Docker ver. 1.13.0 (январь 2017) есть команда system prune:

$ docker system prune --help

Usage:  docker system prune [OPTIONS]

Remove unused data

Options:
-a, --all     Remove all unused images not just dangling ones
-f, --force   Do not prompt for confirmation
    --help    Print usage

Ответ 10

Сначала вы должны остановить/удалить все ненужные контейнеры, созданные на этих изображениях.

Посмотрите: Как удалить старые контейнеры Docker.

После этого используйте решение @marcell.

Ответ 11

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

docker rmi $(docker images | grep "^<none>" | awk '{print $"3"}')

Ответ 12

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

Таким образом, вам не нужно очищать его вручную

Просто запустите:

docker run -d -v /var/run/docker.sock:/var/run/docker.sock:rw  -v /var/lib/docker:/var/lib/docker:rw --restart=unless-stopped meltwater/docker-cleanup:latest

Он будет запускаться каждые 30 минут (или сколько бы вы его не установили с помощью опции DELAY_TIME = 1800) и очистить выведенные контейнеры и изображения.

Подробнее: https://github.com/meltwater/docker-cleanup/blob/master/README.md

Ответ 13

Чтобы удалить изображение Docker, вы должны выполнить следующую команду:

$ docker rmi <docker_image_id>

Итак, чтобы удалить все изображения Docker, вы можете выполнить следующую команду:

$ docker rmi $(docker images -q)

Теперь, если вы хотите удалить все изображения Docker (включая изображения, которые используются), вы можете добавить флаг -f, например:

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