Docker удаляет <none> изображения TAG
[email protected]:~# docker images -a
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
<none> <none> 5e2dfc857e73 5 days ago 261.6 MB
<none> <none> d053e988f23d 5 days ago 261.6 MB
<none> <none> 1d5d4a2d89eb 5 days ago 261.6 MB
<none> <none> ea0d189fdb19 5 days ago 100.5 MB
<none> <none> 26c6175962b3 5 days ago 100.5 MB
<none> <none> 73d5cec4a0b3 5 days ago 100.5 MB
<none> <none> e19590e1bac1 5 days ago 100.5 MB
Я пробовал следующее:
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
И следующее:
docker rmi $(docker images -f "dangling=true" -q)
Вы получите следующую ошибку:
docker: "rmi" requires a minimum of 1 argument.
See 'docker rmi --help'.
Usage: docker rmi [OPTIONS] IMAGE [IMAGE...]
Remove one or more images
Ответы
Ответ 1
Вы можете попробовать и перечислить только немаркированные изображения (те, у которых нет меток или с меткой без тега):
docker images -q -a | xargs docker inspect --format='{{.Id}}{{range $rt := .RepoTags}} {{$rt}} {{end}}'|grep -v ':'
Однако некоторые из этих немаркированных изображений могут понадобиться другим.
Я предпочитаю удалять только оборванные изображения:
docker rmi $(docker images --filter "dangling=true" -q --no-trunc)
Как я уже упоминал для докера 1.13+ в сентябре 2016 года в " "Как удалить старые и неиспользуемые изображения Docker" , вы также можете сделать image prune
команда:
docker image prune
Как говорится, Джанака Бандара упоминает в комментариях:
Это не удалило для меня <none>
-оцененные изображения (например, foo/bar:<none>
); Мне пришлось использовать docker images --digests
и docker rmi foo/[email protected]<digest>
Янака ссылается на Как удалить подписанное изображение с тегом "от Paul V. Novarese:
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
pvnovarese/mprime latest 459769dbc7a1 5 days ago 4.461 MB
pvnovarese/mprime <none> 459769dbc7a1 5 days ago 4.461 MB
Диагностические шаги
Вы можете увидеть разницу в этих двух записях, если используете параметр --digests=true
(немаркированная запись имеет дайджест подписи Доккер-контента):
# docker images --digests=true
REPOSITORY TAG DIGEST IMAGE ID CREATED SIZE
pvnovarese/mprime latest <none> 459769dbc7a1 5 days ago 4.461 MB
pvnovarese/mprime <none> sha256:0b315a681a6b9f14f93ab34f3c744fd547bda30a03b55263d93861671fa33b00 459769dbc7a1 5 days ago
Обратите внимание, что Павел также упоминает вопрос мобильности 18892:
После вытягивания подписанного изображения в "docker images
" появляется "дополнительная" запись (с тегом <none>
).
Это затрудняет rmi
изображение (вы должны принудительно его или сначала удалить правильно помеченную запись или удалить путем дайджестова.
Ответ 2
docker images | grep none | awk '{ print $3; }' | xargs docker rmi
Вы можете попробовать это просто
Ответ 3
docker image prune удаляет все оборванные изображения (те, у которых нет тега). docker image prune -a также удалит все изображения, у которых нет контейнера, который их использует.
Разница между оборванными и неиспользуемыми изображениями объясняется в fooobar.com/questions/313387/....
Ответ 4
Вы можете проверить, не работает ли фильтр 'dangling'
$ docker images -f "dangling=true" -q
Error response from daemon: Invalid filter 'dangling'
Используйте черновую систему Docker для удаления оборванных изображений
$ docker system prune
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all dangling images
- all dangling build cache
Are you sure you want to continue? [y/N]
Вы можете использовать --force
для не запроса подтверждения
$ docker system prune --force
Ответ 5
Согласно документации докера вы можете перечислить только непомеченные (висячие) изображения с
$ docker images -f "dangling=true"
и перенаправить их в команду docker rmi
следующим образом:
$ docker rmi $(docker images -f "dangling=true" -q) --force
Обратите внимание, что параметр -q
показывает только числовые идентификаторы контейнеров.
Ответ 6
Вы можете перейти к docker rmi $(docker images -f "dangling=true" -q)
. Смотрите документацию по изображениям для получения дополнительной информации.
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 94870cda569b 4 seconds ago 673MB
python 2.7 320a06f42b5f 10 days ago 673MB
mysql latest e799c7f9ae9c 2 months ago 407MB
gcavalcante8808/semaphore latest 86e863e11461 2 months ago 537MB
redis latest e32ef7250bc1 2 months ago 184MB
rabbitmq 3.6.9-management 7e69e14cc496 2 months ago 179MB
rabbitmq 3.6.9 eb2e4968538a 2 months ago 179MB
jordan/rundeck latest 6d40b57b1572 2 months ago 660MB
rabbitmq 3.5.6-management dbfe8d18809a 19 months ago 304MB
$ docker rmi $(docker images --format '{{.ID}}' --filter=dangling=true)
Deleted: sha256:94870cda569b8cf5f42be25af107d464c993b4502a1472c1679bf2d213b6c0a6
Ответ 7
Я нашел, что docker image prune -f
наиболее полезен, и я использую его все время во время моей повседневной работы, использование тега -f
не будет запрашивать подтверждение. Подробнее здесь
Ответ 8
Удалите изображения с none
в качестве имени репозитория, используя следующее:
docker rmi $(docker images | grep "^<none" | awk '{print $3}')
Удалить изображения с тегом none
или именем репозитория:
docker rmi $(docker images | grep "none" | awk '{print $3}')
Ответ 9
Чтобы удалить оборванные изображения, используйте:
docker image rm $(docker images --format "{{.ID}}" --filter "dangling=true")
Пожалуйста, обратитесь к моему ответу здесь для более подробного описания: https://unix.stackexchange.com/a/445664/292327
Ответ 10
Команда ниже работает для меня. это просто "grep" "images и получите идентификатор образа докера и удалили все изображения. Простая одиночная команда.
docker rmi $(docker images |grep "<none>"| awk '{print $3}')
Ответ 11
docker system prune
добьется цели, удалив
- all stopped containers
- all networks not used by at least one container
- all dangling images
- all dangling build cache
Но используйте это с осторожностью!
Ответ 12
Это просто и понятно,
Даже я потратил 3 дня, чтобы понять эту простую и четкую ошибку.
Образ докера не построен успешно
Step 7/13 : COPY jupyter_notebook_config.py /root/.jupyter/
---> bf29ce6fe6dc
Step 8/13 : COPY notebooks /notebooks
COPY failed: stat /var/lib/docker/tmp/docker-builder776981166/notebooks: no such file or directory
[email protected]:~/Documents/sam/dockerDem$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> bf29ce6fe6dc 9 seconds ago 1.27GB
ubuntu 16.04 a51debf7e1eb 3 weeks ago 116MB
Затем я удалил 8-ю строку из Dockerfile, на этот раз это был сигнал успеха.
Successfully built b6724370f8ca
Successfully tagged dem:expo
[email protected]:~/Documents/sam/dockerDem$ docker run -it -p 8888:8888 dem:expo
[I 06:11:38.984 NotebookApp] Writing notebook server cookie secret to /root/.local/share/jupyter/runtime/notebook_cookie_secret
[I 06:11:39.011 NotebookApp] Serving notebooks from local directory: /
[I 06:11:39.011 NotebookApp] The Jupyter Notebook is running at:
[I 06:11:39.011 NotebookApp] http://(296d81166725 or 127.0.0.1):8888/?token=496feb282ef749c05277ef57a51e8a56fedb1c6b337b9f92
Он говорит, что успешно помечен dem: expo, эта строка является imp во время процесса докера.
Ответ 13
Это расширение ответа tansadio:
Если вы получаете следующую ошибку:
Error response from daemon: conflict: unable to delete <> (must be forced) - image is being used by stopped container <>
Вы можете форсировать это с помощью --force
:
docker images | grep none | awk '{ print $3; }' | xargs docker rmi --force
Ответ 14
docker rmi -f $ (изображения докера -a | awk 'NR> 1 && $ 2 == "" {print $ 3}')
Ответ 15
Следующее удалит все <none>
изображения
docker rmi $(docker images | grep none | awk '{print $3}')
Вы можете принудительно удалить удаление, изменив docker rmi
на docker rmi -f
, хотя я не рекомендую это делать.
Некоторые изображения <none>
могут быть связаны с другими изображениями, поэтому в целях безопасности не используйте тег -f
.
Ответ 16
попробуйте
docker rmi -f $(docker images -a | awk 'NR> 1 || $2 = "<none>" {print $3}')
, в то время как могут быть более чистые команды
Обновлено
Ответ 17
Просто удалите изображения, используя их идентификаторы:
# docker rmi 5e2dfc857e73 d053e988f23d ...
Ответ 18
Висячие изображения - это призраки из предыдущих сборок и сборок, просто удалите их с помощью: docker rmi $ (docker images -f "dangling = true" -q)
Ответ 19
docker rmi $(docker images -a -q)
Указывает следующие изображения, которые используются. Я думаю, что эта команда избавляется от нежелательных образов.