Докер удаляет <нет> изображений тегов


140
root@server:~# 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

Немного поздно, но я должен добавить этот комментарий для других пользователей. Если вы используете командную строку Windows, это не сработает. Поскольку командная строка не поддерживает внутренние функции. Попробуйте точные линии с Windows PowerShell
эр-хан,

1
docker rmi $(docker images -a | grep "^<none>" | awk '{print $3}')
Ондра Жижка

docker rmi $(docker images | grep "<none>" | awk "{print $3}")
Дэвид

5
docker rmi $(docker images -f dangling=true -q)
Джинна Балу

@Karl Morrison: Ты был почти у цели: только что пропустил -a (--all) in docker images:)
mirekphd

Ответы:


204

Вы можете попробовать и перечислить только немаркированные изображения (без меток или с меткой без меток):

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)

Как я упоминал для docker 1.13+ в сентябре 2016 г. в разделе « Как удалить старые и неиспользуемые образы Docker », вы также можете выполнить image pruneкоманду :

docker image prune

При этом Джанака Бандара упоминает в комментариях :

Это было не удалить <none>-tagged изображения для меня (например foo/bar:<none>); Мне пришлось использовать docker images --digestsиdocker rmi foo/bar@<digest>

Джанака ссылается на « Как удалить подписанное изображение с меткой » из книги Пола В. Новарезе :

# 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 Content Trust):

# 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     

Обратите внимание, что Пол также упоминает выпуск Moby 18892 :

После извлечения подписанного изображения <none>в docker imagesвыводе " " появляется "дополнительная" запись (с тегом ) .
Это усложняет rmiизображение (вы должны его принудительно использовать, иначе сначала удалите запись с правильными тегами, либо удалите по дайджесту.


6
Это не <none>удалило изображения с тегами (например foo/bar:<none>); Мне пришлось использовать docker images --digestsи, docker rmi foo/bar@<digest>как описано на сайте success.docker.com/KBase/…
Джанака Бандара,

1
@JanakaBandara Спасибо. Я включил ваш комментарий в ответ (с некоторыми дополнительными ссылками)
VonC

для меняsudo docker rmi $(docker images --filter "dangling=true" -q --no-trunc) Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.35/images/json?filters=%7B%22dangling%22%3A%7B%22true%22%3Atrue%7D%7D: dial unix /var/run/docker.sock: connect: permission denied "docker rmi" requires at least 1 argument. See 'docker rmi --help'. Usage: docker rmi [OPTIONS] IMAGE [IMAGE...] [flags] Remove one or more images
Джейми Хатбер

@JamieHutber "docker rmi" требует как минимум 1 аргумента. Это предполагает, что docker images --filter "dangling = true" -q --no-trunc ничего не возвращает, что означает отсутствие болтающихся изображений?
VonC

Спасибо, VonC, на самом деле это не такhutber@hutber-blade /var/www/dockerfile-wizard $ sudo docker images --filter "dangling=true" -q --no-trunc sha256:c58f4e4b10b1f862d78f96e90bdf13ffe37993279d0992be46d5c15dad51421e sha256:db28e821bc3f337caf711a664bc529be5db8894dd73c5b013ad814cc1e9fc21b sha256:257936750a7d43ae77c713c2cb18342be935de7d3b8fad23d6664fc64acfe753 sha256:6b815cefeb527885b2b9dd831f7f40b05942f00d1367274833a6274154d8ce43
Джейми Хутбер

43
docker images | grep none | awk '{ print $3; }' | xargs docker rmi

Вы можете попробовать это просто



Придется добавить --forceв конце. Таким образом, команда будет выглядеть так: docker images | grep none | awk '{ print $3; }' | xargs docker rmi --force
Муним Дибош

23

docker image prune удаляет все болтающиеся изображения (те, у которых нет тега). docker image prune -a также удалит все изображения, не имеющие контейнера, который их использует.

Разница между висячими и неиспользуемыми изображениями объясняется в этом потоке stackoverflow .


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

5

Согласно документации докера вы можете перечислить только немаркированные (висячие) изображения с

$ docker images -f "dangling=true"

и перенаправим их на docker rmiтакую ​​команду:

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

Обратите внимание на -qпараметр, который показывает только числовые идентификаторы контейнеров.


1
Разве это не похоже на то, что я предложил в своем ответе в 2015 году?
VonC

5

Вы можете проверить, не работает ли «болтающийся» фильтр.

$ docker images -f “dangling=true” -q
Error response from daemon: Invalid filter 'dangling'

Используйте docker system prune, чтобы удалить болтающиеся изображения

$ 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


4

Я нашел docker image prune -fнаиболее полезным и использую его все время в повседневной работе, использование тега -fне требует подтверждения. Подробнее здесь


3

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

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

Удалите изображения с noneтегом или именем репозитория:

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


2

docker system prune сделает свое дело, он удалит

- all stopped containers
- all networks not used by at least one container
- all dangling images
- all dangling build cache

Но используйте его с осторожностью!


2

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

docker rm $(docker ps -a -q)

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

docker image prune


1

Следующая команда работает для меня. это просто "" изображения с помощью grep, получение идентификатора изображения докера и удаление всех изображений. Простая единственная команда, как и должно.

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


1

Это продолжение ответа 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

1

Далее будут удалены все <none>изображения

docker rmi $(docker images | grep none | awk '{print $3}')

Вы можете принудительно удалить его, изменив docker rmiна, docker rmi -fхотя я не рекомендую этого делать.

Некоторые <none>изображения могут быть связаны с другими изображениями, поэтому на всякий случай не используйте -fтеги.


0

Это просто и понятно,

Даже мне потребовалось 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
anarchist@anarchist-desktop:~/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
anarchist@anarchist-desktop:~/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 успешно помечен, эта строка отображается в процессе докера.



0

Все

Совместное использование команды PowerShell для любителей Windows (на случай, если у вас нет bash, grep или awk)

(docker images) -like '*<none>*' | ForEach-Object { 
  $imageid=($_ -split "\s+")[2]
  docker rmi -f $imageid
}


0

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

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

или убрать тару по шаблону

docker images -a | grep "pattern" | awk '{print $3}' | xargs docker rmi

0

попробуйте это, чтобы увидеть список идентификаторов изображений докеров с тегом <none>

docker images -a | awk '/^<none>/ {print $3}'

а затем вы можете удалить все изображение с тегом <none>. это сработало для меня.

docker rmi $(docker images -a | awk '/^<none>/ {print $3}')


-1

пытаться

docker rmi -f $(docker images -a | awk 'NR> 1 || $2 = "<none>" {print $3}') , хотя могут быть более чистые команды

обновленный


1
Это также удалит изображения, которые не помечены <none>, что является большим ноно.
K - Токсичность в SO растет.

Я обновил свой ответ
user2915097

Команда docker rmi -f $(docker images -a | awk 'NR> 1 || $2 = "" {print $3}ничего не делает!
K - Токсичность в SO растет.


-2

Оборванные изображения - это призраки из предыдущих сборок и сборок, просто удалите их с помощью: docker rmi $ (docker images -f "dangling = true" -q)


OP заявляет, что он уже пробовал эту точную команду, но это не удалось. Кроме того, этот ответ уже давался как минимум дважды.
CaringDev

-5
docker rmi $(docker images -a -q)

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


2
не удаляются ли все изображения?
marianobianchi

3
при этом будут удалены все неиспользуемые изображения, и его не следует отмечать как правильный ответ.
Ghashange
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.