Docker remove <nenhuma> imagens 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

Eu tentei o seguinte:

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

E o seguinte:

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

Obtenha o seguinte erro:

docker: "rmi" requires a minimum of 1 argument.
See 'docker rmi --help'.

Usage:  docker rmi [OPTIONS] IMAGE [IMAGE...]

Remove one or more images

É um pouco tarde, mas tenho que adicionar este comentário para outros usuários. Se você usar o Prompt de Comando do Windows, isso não funcionará. Porque o prompt de comando não oferece suporte a funções internas. Experimente as linhas exatas com o 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}")
David

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

@Karl Morrison: Você estava quase lá: acabou de perder -a (--todos) em docker images:)
mirekphd

Respostas:


202

Você pode tentar listar apenas imagens não marcadas (aquelas sem rótulos ou com rótulos sem tag):

docker images -q -a | xargs docker inspect --format='{{.Id}}{{range $rt := .RepoTags}} {{$rt}} {{end}}'|grep -v ':'

No entanto, algumas dessas imagens não marcadas podem ser necessárias para outras pessoas.

Prefiro remover apenas imagens pendentes :

docker rmi $(docker images --filter "dangling=true" -q --no-trunc)

Como mencionei para docker 1.13+ em setembro de 2016 em " Como remover imagens Docker antigas e não utilizadas ", você também pode executar o image prunecomando :

docker image prune

Dito isso, Janaka Bandara menciona nos comentários :

Isso não removeu <none>as imagens marcadas para mim (por exemplo foo/bar:<none>); Eu tive que usar docker images --digestsedocker rmi foo/bar@<digest>

Janaka faz referência a " Como remover uma imagem assinada com uma etiqueta " de 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

Etapas de Diagnóstico

Você pode ver a diferença nessas duas entradas se usar a --digests=trueopção (a entrada não marcada tem o resumo de assinatura do 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     

Observe que Paulo também menciona o problema moby 18892 :

Após obter uma imagem assinada, há uma entrada "extra" (com tag <none>) na docker imagessaída " ".
Isso torna difícil para rmia imagem (você tem que forçá-la, ou então primeiro exclua a entrada devidamente marcada ou exclua por resumo.


6
Isso não removeu <none>as imagens marcadas para mim (por exemplo foo/bar:<none>); Tive que usar docker images --digestse docker rmi foo/bar@<digest>conforme descrito em success.docker.com/KBase/…
Janaka Bandara

1
@JanakaBandara. Obrigado. Incluí seu comentário na resposta (com alguns links adicionais)
VonC

para mimsudo 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
Jamie Hutber

@JamieHutber "docker rmi" requer pelo menos 1 argumento. Isso sugere imagens do docker --filter "dangling = true" -q --no-trunc não retorna nada, o que significa que não há imagens penduradas?
VonC de

Obrigado VonC, na verdade nãohutber@hutber-blade /var/www/dockerfile-wizard $ sudo docker images --filter "dangling=true" -q --no-trunc sha256:c58f4e4b10b1f862d78f96e90bdf13ffe37993279d0992be46d5c15dad51421e sha256:db28e821bc3f337caf711a664bc529be5db8894dd73c5b013ad814cc1e9fc21b sha256:257936750a7d43ae77c713c2cb18342be935de7d3b8fad23d6664fc64acfe753 sha256:6b815cefeb527885b2b9dd831f7f40b05942f00d1367274833a6274154d8ce43
Jamie Hutber

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

Você pode tentar isso simplesmente


1
A solução mais rápida e fácil para mim
Mark

Tem que adicionar --forceno final. Portanto, o comando será docker images | grep none | awk '{ print $3; }' | xargs docker rmi --force
semelhante a-

23

podar imagem docker remove todas as imagens pendentes (aquelas sem tag). docker image prune -a também removeria quaisquer imagens que não possuíssem um contêiner que as utilizasse.

A diferença entre imagens pendentes e não utilizadas é explicada neste thread stackoverflow .


6

Você pode ir docker rmi $(docker images -f "dangling=true" -q). Veja a documentação das imagens para mais opções.

$ 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

De acordo com a documentação do docker, você pode listar apenas imagens não marcadas (pendentes) com

$ docker images -f "dangling=true"

e redirecioná-los para o docker rmicomando assim:

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

Observe o -qparâmetro que mostra apenas IDs numéricos de contêineres.


1
Não é semelhante ao que propus na minha resposta em 2015?
VonC

5

Você pode verificar se o filtro 'pendurado' não está mais funcionando

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

Use a poda do sistema docker para remover as imagens pendentes

$ 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]

Você pode usar --forcepara não solicitar confirmação

$ docker system prune --force

4

Achei docker image prune -fmais útil e uso-o o tempo todo no meu trabalho do dia a dia, usar a tag -fnão pedirá confirmação. Mais detalhes aqui


4

Basta executar este comando:

docker image prune --filter="dangling=true"

3

Remova as imagens que têm nonecomo nome do repositório usando o seguinte:

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

Remova as imagens com nonetag ou nome de repositório:

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


2

docker system prune vai resolver o problema, remove

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

Mas use, com cuidado!


2

Para remover todas as imagens none, temos que ter certeza de que removemos todos os contêineres interrompidos que eles podem usar para executar:

docker rm $(docker ps -a -q)

então podemos remover todas as imagens:

docker image prune


1

O comando abaixo está funcionando para mim. são apenas imagens grep "" simples e obtêm o id da imagem docker e remove todas as imagens. Comando simples e único, como deve ser.

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


1

Esta é uma extensão da resposta de tansadio:

Se você estiver recebendo o seguinte erro:

Error response from daemon: conflict: unable to delete <> (must be forced) - image is being used by stopped container <>

Você pode forçar com --force:

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

1

Seguir irá remover todas as <none>imagens

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

Você pode forçar a remoção mudando docker rmipara docker rmi -fembora eu não recomende fazer isso.

Algumas das <none>imagens podem estar relacionadas a outras imagens, portanto, por segurança, não use -ftag.


0

É simples e claro,

Até eu levei 3 dias para entender este erro simples e nítido.

A imagem docker não foi construída com sucesso

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

Então removi a 8ª linha do Dockerfile, foi um sinal de sucesso desta vez.

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

Ele diz dem: expo marcado com sucesso, esta linha é imp durante o processo docker.


0

docker rmi -f $ (docker images -a | awk 'NR> 1 && $ 2 == "" {print $ 3}')


0

Tudo

Compartilhando o comando PowerShell para amantes do Windows (apenas no caso de você não ter bash, grep ou awk)

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


0

Remova todos os contêineres de saída

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

ou remova os recipientes de acordo com um padrão

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

0

tente isso para ver a lista de ID de imagens do docker com tag <none>

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

e então você pode excluir todas as imagens com tag <none>. isso funcionou para mim.

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

0

100% funciona: docker images | grep none | awk '{print $ 3}' | xargs docker rmi -f



-1

Basta remover as imagens usando seus IDs:

# docker rmi 5e2dfc857e73 d053e988f23d ...

-2

As imagens pendentes são fantasmas das compilações e pulls anteriores, basta excluí-las com: docker rmi $ (docker images -f "dangling = true" -q)


O OP afirma que ele tentou este comando exato, mas falhou. Além disso, esta resposta já foi dada pelo menos duas vezes.
CaringDev

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.