Como remover uma imagem no Docker?

840

Estou executando o Docker no Vagrant no OS X 10.8.4 (Mountain Lion) e sempre que tento excluir uma imagem salva, recebo um erro:

$ docker rmi some-image-id
2013/07/15 hh:mm:ss unexpected JSON input

De acordo com a rmiajuda, a sintaxe correta é docker rmi IMAGE [IMAGE...]e não sei o que fazer disso.

Como posso excluir uma imagem?

$ docker version
Client version: 0.4.8
Server version: 0.4.8
Go version: go1.1

 

$docker info
Containers: 1
Images: 3

Curiosamente, quando corro docker ps, nenhum container aparece. A corrida docker imagesmostra quatro (4) baseimagens e uma (1) nodeimagem.

Jules
fonte
1
Qual versão do docker você está usando? Você pode colar a saída de 'versão do docker' e 'informações do docker'? Eu apenas tentei com o mestre e funcionou bem.
creack
Atualizei a pergunta com essas informações.
Jules
1
docker infomostra a quantidade real de imagens, você pode tentar ./docker images -a -q | sort | uniq | wc -lque o resultado seja o mesmo (-a para todas as imagens, -q apenas para os IDs). docker psmostra apenas contêineres ativos, você pode fazer docker ps -apara listar todos os contêineres
creack
Você pode tentar iniciar o daemon do docker com a -Dopção e o cliente também? docker -d -D& ; docker -D rmi <id>. Você também pode tentar CID=$(docker run -d ubuntu bash); ID=$(docker commit $CID); docker rmi $ID?
creack
4
Dê uma olhada nesta solicitação de recebimento
creack

Respostas:

1013

Tente docker rmi node. Isso deve funcionar.

Ver todos os contêineres criados é tão simples quanto docker ps -a.

Para remover todos os contêineres existentes (não imagens!), Execute docker rm $(docker ps -aq)

Nick Stinemates
fonte
13
Se alguns de seus contêineres ainda estiverem em execução, você poderá executar: docker stop $ (docker ps -qa) para parar todos os contêineres. Eu acho que remover um contêiner em execução pode não funcionar, pelo menos eu lembro que tive problemas com isso. Posso estar errado com ela ... Verifiquei a página de manual e ela suporta minha hipótese: "-f, --force = true | false Força a remoção do contêiner em execução. O padrão é falso".
precisa saber é o seguinte
1
Ah, eu não sabia sobre o comando "remover todos os contêineres existentes". Tinha escrito próprio: docker ps -a | sed -r 's / ^ (\ w +). * / \ 1 / g' | sed -r 's / ^ CONTAINER //' | sed -r 's / ^ (\ w +) / janela de encaixe rm \ 1 / g' | awk 'system ($ 0)' Obrigado!
Anurag
4
Você sabe que as opções de linha de comando são mal projetadas quando você precisa usar recursos específicos do shell para obter funcionalidade básica.
user3467349
Para remover todas as imagens existentes, você pode usar - "docker rmi $ (docker images -q)"
human
Para remover todos os contêineres existentes usando o Windows PowerShell: docker ps -aq | Foreach-Object { docker stop $_; docker rm $_; }
fartwhif
565

A seguir, estão algumas maneiras de remover imagens / recipientes do Docker:

Remover imagem única

docker rmi image_name:version/image-id

Remova todas as imagens

docker rmi $(docker images -qf "dangling=true")

Mate os recipientes e remova-os:

docker rm $(docker kill $(docker ps -aq))

Nota: Substitua killpor stoppara um desligamento normal

Remova todas as imagens, exceto "minha imagem"

Use grep para remover todos, exceto my-imageeubuntu

docker rmi $(docker images | grep -v 'ubuntu\|my-image' | awk {'print $3'})

Ou (sem awk)

docker rmi $(docker images --quiet | grep -v $(docker images --quiet ubuntu:my-image))

Ulises
fonte
25
Adição: remova imagens "dangling" (imagens sem tags):docker rmi $(docker images -qf "dangling=true")
kolypto 26/09/14
5
shoudl bedocker rm $(docker kill $(docker ps -a -q))
BMW
1
"Remover tudo exceto" sem awk:docker rmi $(docker images --quiet | grep -v $(docker images --quiet ubuntu:my-image))
phobie 06/12/16
1
@kolypto O "dangling = true" parece acabar não excluindo contêineres não-dangling. Execute novamente, menos o sinalizador -f e o pendente para remover o restante.
DougW
1
Sou apenas eu, ou essa última sugestão (ou (sem awk)) não está realmente funcionando?
Mike Wise
196

Excluir todos os contêineres da janela de encaixe

docker rm $(docker ps -a -q)

Excluir todas as imagens da janela de encaixe

docker rmi $(docker images -q)
Crisálida
fonte
7
Remova imagens não marcadas:docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
Barrett Clark
1
eq8.eu/blogs/23-spring-cleaning-for-webdevelopers sudo docker rmi -f $(sudo docker images | grep "<none>" | awk "{print \$3}") e depois para remover tags de lançamento ao vivo de 2015 (por exemplo live-20150121223) o que podemos fazer sudo docker rmi -f $(sudo docker images | grep live-2015 | awk "{print \$3}")
equivalent8
Para forçá-lo, você deve escrever: docker -f rm $ (docker ps -a -q)
Adrian Lopez
71

Para remover uma imagem do Docker usando o ID da imagem:

  1. Obter a lista de todas as imagens

    docker images
    
  2. Identifique o ID da imagem que você deseja excluir, por exemplo:

    REPOSITORY     TAG     IMAGE ID        CREATED        VIRTUAL SIZE
    kweku360/java  latest  08d3a9b8e166    2 weeks ago         5.733 GB`
    
  3. Por fim, remova a imagem usando o ID da imagem (somente os três primeiros dígitos são necessários)

    docker rmi 08d
    
kweku360
fonte
1
Primeiro, é necessário parar o contêiner e removê-lo, consulte stackoverflow.com/questions/21398087/…
vikramvi
37

Imagem:

  1. Listar imagens

    imagens do docker

  2. Remova uma imagem

    docker rmi nome_da_imagem

  3. Forçar a remoção de uma imagem

    docker rmi -f nome_da_imagem

Recipiente:

  1. Listar todos os contêineres

    docker ps -a

  2. Retire um recipiente

    docker rm container_id

  3. Forçar a remoção de um contêiner

    docker rm -f container_id

código hackfox
fonte
29

Atualização, conforme comentado por VonC em Como remover contêineres antigos do Docker .

Com o Docker 1.13 (quarto trimestre de 2016), agora você tem:

docker system prune excluirá TODOS os dados não utilizados (ou seja, em ordem: contêineres parados, volumes sem contêineres e imagens sem contêineres).

Consulte PR 26108 e confirme 86de7c0 , que estão apresentando alguns novos comandos para ajudar a facilitar a visualização de quanto espaço os dados do daemon do Docker estão ocupando no disco e permitindo limpar facilmente o excesso "desnecessário".

docker system prune

WARNING! This will remove:
    - all stopped containers
    - all volumes not used by at least one container
    - all images without at least one container associated to them
Are you sure you want to continue? [y/N] y
qkrijger
fonte
Obrigado pela resposta completa, mas isso não responde diretamente à pergunta original (que já foi respondida e cuja resposta principal ainda é relevante).
Jul16
2
Concordo. No entanto, como o título dessa pergunta é muito genérico, isso meio que se tornou uma pergunta de referência, então pensei em atualizar o mecanismo.
Qkrijger
24

Remoção de contêineres

  1. Para remover um contêiner específico

    docker rm CONTAINER_ID CONTAINER_ID
    
    • Para imagem única

      docker rm  70c0e19168cf
      
    • Para várias imagens

      docker rm  70c0e19168cf c2ce80b62174
      
  2. Remover contêineres encerrados

    docker ps -a -f status=exited
    
  3. Retire todos os recipientes

    docker ps -q -a | xargs docker rm
    


Removendo Imagens

docker rmi IMAGE_ID
  1. Remova imagens específicas

    • para imagem única

      docker rmi ubuntu
      
    • para várias imagens

      docker rmi ubuntu alpine
      
  2. Remover imagens pendentes Imagens pendentes
    são camadas que não têm relação com nenhuma imagem marcada, pois as imagens do Docker são constituídas por várias imagens.

    docker rmi -f $(docker images -f dangling=true -q)
    
  3. Remova todas as imagens do Docker

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

Removendo Volumes

Para listar volumes, execute docker volume ls

  1. Remova um volume específico

    docker volume rm VOLUME_NAME
    
  2. Remover volumes pendentes

    docker volume rm $(docker volume ls -f dangling=true -q)
    
  3. Remova um contêiner e seus volumes

    docker rm -v CONTAINER_NAME
    
Tudo é muito
fonte
Por que dobrar CONTAINER_ID?
22618 Peter Mortensen
19

docker rm container_name

docker rmi image_name

docker help

rm Remova um ou mais contêineres

rmi Remova uma ou mais imagens

KunMing Xie
fonte
Obrigado, mas esta pergunta já tem várias respostas, e uma resposta selecionada, que resolveu o problema há quase 3 anos.
Jules
13
docker rmi  91c95931e552

Resposta de erro do daemon: Conflito, não é possível excluir 91c95931e552 porque o contêiner 76068d66b290 o está usando, use -f para forçar FATA [0000] Erro: falha ao remover uma ou mais imagens

Encontre o ID do contêiner,

# docker ps -a

# docker rm  daf644660736 
lakshmikandan
fonte
Isso é uma resposta para a pergunta?
22618 Peter Mortensen
Por que daf644660736? Como isso está relacionado a algum dos anteriores?
22618 Peter Mortensen
5

Primeiro, precisamos parar e remover os contêineres do Docker anexados à imagem do Docker que iremos remover.

Então, para isso, primeiro

  • docker stop container-id - Para parar o contêiner em execução
  • docker rm container-id - Para excluir / remover o contêiner

então,

  • docker rmi image-id - Para excluir / remover a imagem
Murali Manchadikkal
fonte
3

Para as versões 1.13 e superior:

docker image rm [OPTIONS] IMAGE [IMAGE...]

Comparando:

o [OPTIONS]parece não ter diferença.

--force , -f        Force removal of the image
--no-prune          Do not delete untagged parents

De: Introdução ao Docker 1.13

CLI reestruturado

No Docker 1.13, reagrupamos todos os comandos para ficar embaixo do objeto lógico com o qual ele está interagindo. Por exemplo, liste startde contêineres agora são subcomandos docker containere historyé um subcomando de docker image.

Essas alterações permitem limpar a sintaxe da CLI do Docker, melhorar o texto de ajuda e simplificar o uso do Docker. A sintaxe antiga de comando ainda é suportada, mas incentivamos todos a adotar a nova sintaxe .

tgogos
fonte
3

O Docker fornece algum comando para remover images.

Mostrar / Remover Images:

docker images
docker images -a # All images
docker images --no-trunc # List the full length image IDs

docker images --filter "dangling=true" // Show unstage images
docker rmi $(docker images -f "dangling=true" -q) # Remove on unstages images

docker rmi <REPOSITORY> or <Image ID> # Remove a single image

docker image prune # Interactively remove dangling images
docker image prune -a # Remove all images

or 

docker rmi -f $(sudo docker images -a -q)

Além disso, você também pode usar filterparâmetros para remover o conjunto de imagens de uma só vez:

Exemplo:

$docker images --filter "before=<hello-world>" // It will all images before hello-world

$docker images --filter "since=<hello-world>" // It will all images since hello-world

Portanto, você pode excluir as imagens de filtro como estas:

docker rmi $(docker images --filter "since=<hello-world>")
docker rmi $(docker images --filter "before=<hello-world>")
Mr Singh
fonte
1

Exclua todos eles usando

Etapa 1: Mate todos os contêineres

for i in `sudo docker ps -a | awk '{ print $1 }'`; do sudo docker kill $i ; done

Etapa 2: RM-los primeiro

for i in `sudo docker ps -a | awk '{ print $1 }'`; do sudo docker rm $i ; done

Etapa 3: excluir as imagens usando força

for i in `sudo docker images | awk '{ print $3}'`; do  sudo docker rmi --force $i ; done

Use a etapa 1 caso esteja recebendo um erro dizendo que não pode ser excluído devido a dependências filho

chandank
fonte
1

Se você deseja limpar automaticamente / periodicamente os contêineres existentes e remover imagens e volumes que não estão em uso por um contêiner em execução, é possível fazer o download da imagem meltwater/docker-cleanup.

Uso isso na produção, uma vez que implantamos várias vezes ao dia em vários servidores, e não quero ir a todos os servidores para limpar (isso seria complicado).

Apenas corra:

docker run -d -v /var/run/docker.sock:/var/run/docker.sock:rw  -v /var/lib/docker:/var/lib/docker:rw --restart=unless-stopped meltwater/docker-cleanup:latest

Ele será executado a cada 30 minutos (ou por quanto tempo você o definir usando a opção DELAY_TIME = 1800) e limpará os contêineres e imagens existentes.

Mais detalhes: https://github.com/meltwater/docker-cleanup/blob/master/README.md

Anigbo inocente
fonte
1

Aqui está um script de shell para remover uma imagem marcada (nomeada) e seus contêineres. Salve como docker-rmi e execute usando 'docker-rmi my-image-name'

#!/bin/bash

IMAGE=$1

if [ "$IMAGE" == "" ] ; then
  echo "Missing image argument"
  exit 2
fi

docker ps -qa -f "ancestor=$IMAGE" | xargs docker rm
docker rmi $IMAGE
Alex M
fonte
você precisa xargs -rfazê-lo funcionar na caixa do contêiner sem correspondência.
como.
0

Por que ninguém mencionou docker-compose! Acabei de usá-lo por uma semana e não posso sobreviver sem ele. Tudo o que você precisa é escrever um yml que leva apenas alguns minutos de estudo e então você está pronto para começar. Ele pode inicializar imagens, contêineres (necessários nos chamados serviços) e permitir que você revise os logs da mesma forma que usa com os comandos nativos do docker. Experimente:

docker-compose up -d
docker-compose down --rmi 'local'

Antes de usar o docker-compose, escrevi meu próprio script de shell e tive que personalizar o script sempre que necessário, especialmente quando a arquitetura do aplicativo foi alterada. Agora não preciso mais fazer isso, graças ao docker-compose.

Tiina
fonte
docker-composeé uma ferramenta de orquestração e muitas vezes impraticável para uso em projetos simples. Uma dockersolução independente (que não requer o uso de docker-compose.ymlconfigurações frequentemente finnicky ) é preferível no contexto desta pergunta. Além disso, já existem muitas, muitas boas respostas.
Jules
@Jules que ninguém mencionou o docker-compose não significa que sejam respostas ruins e também não é uma resposta indefesa. Os comandos nativos do Docker não são ruins, mas entediantes e exigem muita digitação sempre. "Um é bom e dois é demais".
Tiina
-1

Para mim, o seguinte funcionou bem:

> docker images
REPOSITORY   TAG           IMAGE ID          CREATED             SIZE
debian       jessie        86baf4e8cde9      3 weeks ago         123MB
ubuntu       yakkety       7d3f705d307c      3 weeks ago         107MB
alpine       3.5           074d602a59d7      7 weeks ago         3.99MB

Em seguida, vá em frente e remova uma imagem executando algumas como estas:

> docker rmi debian:jessie
> docker rmi ubuntu:yakkety
> docker rmi alipine:3.5
Julisch
fonte
-1

Listar imagens:

ahanjura@ubuntu:~$ sudo docker images

REPOSITORY TAG ID DE IMAGEM CRIADO TAMANHO 88282f8eda00 19 segundos atrás 308,5 MB 13e5d3d682f4 19 horas atrás 663 MB busybox2 mais recente 05fe66bb1144 20 horas ago 1.129 MB ubuntu 16.04 00fd29ccc6f1 5 dias atrás 110.5 MB ubuntu 1484 67759a80392.4 dias busybox latest 6ad733544a63 6 semanas atrás 1.129 MB ubuntu 16.10 7d3f705d307c 5 meses atrás 106.7 MB

Excluir imagens:

ahanjura@ubuntu:~$ sudo docker rmi 88282f8eda00

Excluídos: sha256: 88282f8eda0036f85b5652c44d158308c6f86895ef1345dfa788318e6ba31194 Deleted: sha256: 4f211a991fb392cd794bc9ad8833149cd9400c5955958c4017b1e2dc415e25e9 Deleted: sha256: 8cc6917ac7f0dcb74969ae7958fe80b4a4ea7b3223fc888dfe1aef42f43df6f8 Deleted: sha256: b74a8932cff5e61c3fd2cc39de3c0989bdfd5c2e5f72b8f99f2807595f8ece43

ahanjura@ubuntu:~$ sudo docker rmi 13e5d3d682f4

Resposta de erro do daemon: conflito: não é possível excluir 13e5d3d682f4 (deve ser forçado) - a imagem está sendo usada pelo contêiner parado 5593e25eb638

Excluir por força:

ahanjura@ubuntu:~$ sudo docker rmi -f 13e5d3d682f4

Excluídos: sha256: 13e5d3d682f4de973780b35a3393c46eb314ef3db45d3ae83baf2dd9d702747e Deleted: sha256: 3ad9381c7041c03768ccd855ec86caa6bc0244223f10b0465c4898bdb21dc378 Deleted: sha256: 5ccb917bce7bc8d3748eccf677d7b60dd101ed3e7fd2aedebd521735276606af Deleted: sha256: 18356d19b91f0abcc04496729c9a4c49e695dbfe3f0bb1c595f30a7d4d264ebf

user1833058
fonte
-1

No meu caso, o problema é que tenho duas imagens com o mesmo nome, a solução é adicionar a tag após o nome ou o id

sudo docker rmi <NAME>:<TAG>

ex:

sudo docker rmi php:7.0.4-fpm
Amirouche Zeggagh
fonte