Не удается удалить изображения, хотя контейнер не запущен

На моем компьютере было несколько остановленных контейнеров и образов.
Я хотел очистить и удалить все контейнеры:
docker ps -a ничего не возвращает.
Я запускаю docker rmi $(docker images -q), чтобы удалить кэшированные изображения, но получаю:

Ответ на ошибку от демона: конфликт: невозможно удалить... (необходимо принудительно) — на изображение ссылаются в нескольких репозиториях

О каких репозиториях идет речь?


person Jim    schedule 17.11.2018    source источник
comment
вы можете попробовать вызвать его с опцией Force (-f): docker rmi -f $(docker images -q)   -  person Vicctor    schedule 17.11.2018
comment
Здесь вы можете найти подсказку для этого: github.com/porttainer/porttainer/issues/497 github.com/moby/moby/issues/1530 похоже, если вы иметь несколько тегов на одном и том же изображении, докер вернется с таким сообщением.   -  person Vicctor    schedule 17.11.2018


Ответы (8)


Вы не можете удалить образы с несколькими репозиториями без модификатора force, см. документы по Docker. больше информации.

docker images
REPOSITORY                   TAG      IMAGE ID            CREATED           SIZE
repository/image-name        tag      a8e6fa672e89        10 days ago         344MB
repository2/image-name       tag      a8e6fa672e89        10 days ago         344MB

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

docker rmi a8e6fa672e89
Error response from daemon: conflict: unable to delete a8e6fa672e89 (must be forced) - image is referenced in multiple repositories

Удалите репозиторий/тег, который вам не нужен:

docker rmi repository/image-name:tag
Untagged: repository/image-name:tag
Untagged: repository/image-name:tag@sha256:64b5a02e2bb3ee4d4b7c0982e8e2e5eb68bdfd0fb096fce22b6c030dafb53a33

(Повторяйте последний шаг, пока не останется только один репозиторий/тег) И теперь вы сможете удалить образ:

docker rmi a8e6fa672e89
Untagged: repository2/image-name:tag
Deleted: sha256:a8e6fa672e89b399bd3ac52b96c031e6816a69191d1fd7e6a1839fd643e3c751
Deleted: sha256:9861dd7b5783217515f571fdcfa6729e1e38af3ae9c971026e5a317b12fc5905

Если вы используете флаг -f и указываете короткий или длинный идентификатор изображения, то rmi снимает теги и удаляет все изображения, соответствующие указанному идентификатору.

person Gabriel    schedule 15.03.2019

«Репозитории», о которых идет речь, являются частью первого столбца docker images:

docker images
REPOSITORY                   TAG      IMAGE ID            CREATED           SIZE
repository/image-name        tag      a8e6fa672e89        10 days ago         344MB
repository2/image-name       tag      a8e6fa672e89        10 days ago         344MB

(Я беру образцы, которые Габриэль показал в своем ответе)

Здесь у нас есть два репозитория: «репозиторий» и «репозиторий2». Как вы также можете видеть, оба изображения имеют одинаковый IMAGE ID.

docker images -q перечисляет все доступные идентификаторы ИЗОБРАЖЕНИЯ. Таким образом, если вы хотите удалить IMAGE ID, на который ссылаются два изображения, вы получите указанную вами ошибку.

Решение. Вы можете удалить изображение по его имени вместо идентификатора:

docker rmi repository/image-name:tag
person Heri    schedule 25.05.2020
comment
Спасибо, это помогло мне. Я хотел совместить это с пользовательским фильтром. Использование docker images -q возвращает идентификаторы по умолчанию. После вашего комментария я добавил аргумент --format, в результате чего получилось следующее: docker rmi $(docker image ls --filter "label=lu.ptech.bb.built-by=malbert" --format "{{.Repository}}:{{.Tag}}") - person exhuma; 17.05.2021

Вы можете очистить все контейнеры. Прежде всего, вам нужно остановить все контейнеры с: docker stop $(docker ps -aq). Наконец, удалите все контейнеры с: docker rm $(docker ps -aq). Вы можете сделать все это одной командой docker rm $(docker stop $(docker ps -aq)).

Если вы хотите удалить все данные контейнеров:

docker container prune
docker network prune
docker system prune
docker volume prune
docker builder prune
person Toir    schedule 19.07.2020

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

sudo docker rmi -f image_id
person hussains8    schedule 16.02.2021
comment
Это должен быть правильный ответ - person Enrique Benito Casado; 16.03.2021

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

docker images | awk '{print $1":"$2}' | egrep -E 'REPOSITORY|TAG' | xargs -n1 docker rmi
person kiwo    schedule 23.01.2020

чтобы удалить одну запись: sudo docker rmi -f ‹image_name›

чтобы удалить все изображения:
sudo docker rmi -f $(sudo docker images -a -q)

Параметр -f важен

person Soner PALANCI    schedule 06.01.2021
comment
Хотя этот код может решить проблему, включая объяснение того, как и почему это решает проблему, действительно поможет улучшить качество вашего сообщение и, вероятно, приведет к большему количеству голосов. Помните, что вы отвечаете на вопрос для будущих читателей, а не только для того, кто задает сейчас. Пожалуйста, отредактируйте свой ответ, чтобы добавить пояснения и указать, какие ограничения и предположения применяются. - person Yunnosch; 06.01.2021

Ошибка ответа от демона: конфликт: невозможно удалить 3472c3b5350b (должно быть принудительно) — на изображение есть ссылки в нескольких репозиториях Ответ на ошибку от демона: конфликт: невозможно удалить 3472c3b5350b (должно быть принудительно) — на изображение есть ссылки в нескольких репозиториях

Если возникает эта ошибка, сначала снимите тег с изображения, а затем его можно будет удалить. Это можно сделать с помощью следующей команды. докер рми :‹image_tag›

person Tarun Banda    schedule 20.05.2021
comment
Пожалуйста, добавьте теги к вашему вопросу и расскажите больше о языке, который вы использовали - person Sébastien REMY; 21.05.2021

person    schedule
comment
Это не дает ответа на вопрос. Чтобы подвергнуть критике или запросить разъяснения у автора, оставьте комментарий под его публикацией. – Из обзора - person Abhinav Gupta; 05.01.2021