Докер видалити <none> TAG-зображення


139
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
er-han

1
docker rmi $(docker images -a | grep "^<none>" | awk '{print $3}')
Ondra Žižka

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

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

@Karl Morrison: Ви майже були там: щойно пропустили -a (- всі) у docker images:)
mirekphd

Відповіді:


203

Ви можете спробувати і перерахувати лише немальовані зображення (зображення без міток або мітки без тегів):

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     

Зауважимо, що Павло також згадує випуск мобільних телефонів 18892 :

Після витягування підписаного зображення з'являється "додатковий" запис (з тегом <none>) у docker imagesвиході " ".
Це ускладнює rmiзображення (ви повинні змусити його, або ж спочатку видалити правильно позначений запис або видалити дайджест.


6
Це не <none>видалило для мене теги-теги (наприклад foo/bar:<none>); Мені довелося користуватися docker images --digestsі docker rmi foo/bar@<digest>як описано на сайті success.docker.com/KBase/…
Janaka Bandara

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 аргумент. Це говорить про те, що зображення докера --filter "звисаючий = правдивий" -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

Ви можете спробувати це просто


1
Найшвидше і найлегше для мене рішення
Марк

Додавати --forceв кінці. Тож команда буде виглядати так docker images | grep none | awk '{ print $3; }' | xargs docker rmi --force
Мунім Дібош

23

Зрізання зображення докера видаляє всі звисаючі зображення (тих, у яких немає тегів). 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
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ми повинні бути впевнені, що ми видалили всі зупинені контейнери, які вони можуть використовувати:

docker rm $(docker ps -a -q)

тоді ми можемо видалити всі зображення:

docker image prune


1

Наведена нижче команда працює для мене. це просто прості зображення "", отримайте ідентифікатор зображення докера та видалить усі зображення. Проста одна команда, як це потрібно.

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 каже, що успішно позначено dem: expo, цей рядок є imp під час докерського процесу.



0

Усі

Ділитися командою PowerShell для любителів Windows (про всяк випадок, якщо у вас немає башту, грепу чи анотації)

(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>, що є великим nono.
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)


ОП заявляє, що він вже спробував цю точну команду, але це не вдалося. Також ця відповідь була дана вже принаймні двічі.
CaringDev

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

Наведені нижче зображення, де вони використовуються. Я думаю, що ця команда позбавляється від небажаних зображень.


2
це не видаляє всі зображення?
marianobianchi

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