O erro do docker não pode excluir o contêiner do docker, conflito: não é possível remover a referência do repositório

165

Quero remover o contêiner no Docker, mas ocorre um erro quando você deseja excluir

Minha próxima etapa antes de remover o contêiner, veja a lista de contêineres existentes

sts@Yudi:~/docker$ sudo docker ps -as

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                    PORTS               NAMES                  SIZE
78479ffeba5c        ubuntu              "/bin/bash"         42 hours ago        Exited (0) 42 hours ago                       sharp_wescoff          81 B (virtual 187.7 MB)
0bd2b54678c7        training/webapp     "python app.py"     5 days ago          Exited (0) 5 days ago                         backstabbing_ritchie   0 B (virtual 323.7 MB)
0adbc74a3803        training/webapp     "python app.py"     5 days ago          Exited (143) 5 days ago                       drunk_feynman          0 B (virtual 323.7 MB)

um que eu quero excluir da lista, ou seja, "training / webapp", mas ocorreu um erro

sts@Yudi:~/docker$ sudo docker rmi training/webapp
Error response from daemon: conflict: unable to remove repository reference "training/webapp" (must force) - container 0bd2b54678c7 is using its referenced image 54bb4e8718e8
Error: failed to remove images: [training/webapp]

Se o contêiner está sendo executado nas imagens?

Por favor ajude

Yuday
fonte
isso às vezes acontece comigo, mas sou incapaz de descobrir o padrão do que faz com que isso aconteça (já que nem sempre acontece comigo); além disso, se forçar a remoção da imagem, ela também remove várias outras coisas. Você sabe o que causou o erro para você? você é capaz de reproduzi-lo?
Charlie Parker
Excelente resumo recente Como remover imagens, contêineres e volumes do Docker de Melissa Anderson Dec 2017, com exemplos de filtros, padrões, etc.
Webel IT Australia - upvoter

Respostas:

124

Há uma diferença entre as imagens e os contêineres. Verifique esta questão SO .

Em resumo, um contêiner é uma instância em execução de uma imagem. é por isso que você não pode excluir uma imagem se houver um contêiner em execução nessa imagem. Você só precisa excluir o contêiner primeiro.

docker ps -a               # Lists containers (and tells you which images they are spun from)
docker images              # Lists images  
docker rm <container_id>   # Removes a container

docker rmi <image_id>      # Removes an image 
                           # Will fail if there is a running instance of that image i.e. container

docker rmi -f <image_id>   # Forces removal of image even if it is referenced in multiple repositories, 
                           # i.e. same image id given multiple names/tags 
                           # Will still fail if there is a docker container referencing image

Atualização para o Docker 1.13+ [Desde janeiro de 2017]

No Docker 1.13, reagrupamos todos os comandos para ficar embaixo do objeto lógico com o qual ele está interagindo

Basicamente, os comandos acima também podem ser reescritos, mais claramente, como:

docker container ls -a
docker image ls
docker container rm <container_id>
docker image rm <image_id>

Além disso, se você deseja remover TUDO, você pode usar:

docker system prune -a

AVISO! Isso removerá:

  • todos os contêineres parados
  • todas as redes não usadas por pelo menos um contêiner
  • todas as imagens não utilizadas
  • todo o cache de compilação
Ahmad Abdelghany
fonte
2
Acabei tendo que usar docker rmi -f idpara "forçar" a remoção.
WernerCD
O @WernerCD -fajuda quando você deseja remover uma imagem referenciada em vários repositórios, que é outro motivo comum para não remover uma imagem.
Ahmad Abdelghany
1
vale a pena notar que docker container lsapenas lista os contêineres em execução. Isso mexeu comigo até eu perceber que adicionar a -abandeira lista todas elas.
MFB 6/02
@MFB Bom ponto. Adicionado o sinalizador ao comando para manter a paridade entre os dois conjuntos de comandos. Obrigado!
Ahmad Abdelghany
ainda funciona no OSX Docker Desktop v2.2.0.4 (mecanismo 19.03.8)
rrrrrraul
83

Primeiro, remova os nomes dos contêineres

$ sudo docker rm backstabbing_ritchie

O resultado

$ sudo docker rm backstabbing_ritchie
  backstabbing_ritchie

exclua a segunda parte, listada no contêiner a ser excluído

$ sudo docker rm drunk_feynman 
  drunk_feynman

Segundo, remova o recipiente

$ sudo docker rmi training/webapp

O resultado

$ sudo docker rmi training/webapp  
  Untagged: training/webapp:latest
  Deleted: 54bb4e8718e8600d78a5d7c62208c2f13c8caf0e4fe73d2bc0e474e93659c0b5
  Deleted: f74dd040041eb4c032d3025fe38ea85de8075992bdce6789b694a44b20feb8de
  Deleted: 7cbae69141977b99c44dc6957b032ad50c1379124d62b7d7d05ab7329b42348e
  Deleted: abb991a4ed5e4cde2d9964aec4cccbe0015ba9cc9838b696e7a32e1ddf4a49bd
  Deleted: 1952e3bf3d7e8e6a9b1e23bd4142e3c42ff7f4b7925122189704323593fd54ac
  Deleted: f95ebd363bf27a7546deced7a41a4099334e37a3d2901fa3817e62bb1ade183f
  Deleted: 20dd0c75901396d41a7b64d551ff04952084cc3947e66c67bae35759c80da338
  Deleted: 2505b734adda3720799dde5004302f5edb3f2a2ff71438f6488b530b728ba666
  Deleted: 2ee0b8f351f753f78f1178000ae37616eb5bf241d4ef041b612d58e1fd2aefdc
  Deleted: 2ce633e3e9c9bd9e8fe7ade5984d7656ec3fc3994f05a97d5490190ef95bce8d
  Deleted: 98b15185dba7f85308eb0e21196956bba653cf142b36dc08059b3468a01bf35d
  Deleted: 515565c29c940355ec886c992231c6019a6cffa17ff1d2abdfc844867c9080c5
  Deleted: 2880a3395eded9b748c94d27767e1e202f8d7cb06f1e40e18d1b1c77687aef77

Verifique o continente

  $ sudo docker ps -as
  CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                    PORTS               NAMES                  SIZE
  78479ffeba5c        ubuntu              "/bin/bash"         43 hours ago        Exited (0) 43 hours ago                       sharp_wescoff          81 B (virtual 187.7 MB)
Yuday
fonte
6
Se houver muitos contêineres antigos, considere a janela rm `docker ps -aq`de encaixe para limpeza, em vez de removê-los um de cada vez. Mais informações aqui
Philiiiiiipp 15/01
Por que é necessário excluir o nome antes de excluir a imagem? Por que tentar excluir uma imagem sem excluir o nome seria um problema?
Code_dredd 04/04
@code_dredd Não existe algo como "excluir nomes". É o contêiner que deve ser excluído primeiro antes de excluir uma imagem. Mais detalhes em stackoverflow.com/a/40283776/1998422
Ahmad Abdelghany 25/18
37

Se você deseja limpar imagens e recipientes da janela de encaixe

CUIDADO: isso liberará tudo

pare todos os recipientes

docker stop $(docker ps -a -q)

remova todos os recipientes

docker rm $(docker ps -a -q)

remova todas as imagens

docker rmi -f $(docker images -a -q)
quAnton
fonte
Isso funcionou. Além disso, se você parar o contêiner, ainda o verá em uma lista. Portanto, você deve removê-lo com docker rm $(docker ps -a -q). Obrigado!
28

você pode usar a -fopção para forçar a exclusão dos contêineres.

sudo docker rmi -f training/webapp

Você pode parar os recipientes usando sudo docker stop training/webappantes de excluir

Saril Sudhakaran
fonte
1
Eu tentei isso, parando recipiente $ sudo janela de encaixe parada formação / resposta de erro webapp do daemon: nenhuma ID: formação / webapp erro: Falha ao recipientes paragem: [formação / webapp]
Yuday
você pode tentar parar com o ID do contêiner sudo docker stop 0bd2b54678c7
Saril Sudhakaran
23

Se você tiver vários contêineres docker lançados, use este

$ docker rm $(docker ps -aq)

Ele removerá todas as janelas de encaixe atuais listadas no comando "ps -aq".

Fonte: aaam em https://github.com/docker/docker/issues/12487

gael
fonte
Isso funcionou para mim. Depois de executar esse comando, executei docker image lse depois docker image rm Xonde cada X foi obtido da lssaída.
jftuga
5

Percebi que essa é uma pergunta de 2 anos, mas ainda quero compartilhar minha solução alternativa para essa pergunta em particular:

primeiro, corra docker container ls -apara listar todos os contêineres que você possui e identifique o que deseja excluir.

Em segundo lugar, exclua aquele com o comando docker container rm <CONTAINER ID>(se o contêiner estiver em execução no momento, você deve pará-lo primeiro, execute docker container stop <CONTAINER ID>para parar normalmente o contêiner especificado, se não o parar por qualquer motivo, é possível executar alternativamente docker container kill <CONTAINER ID> to force shutdown of the specified container).

Em terceiro lugar, remova o contêiner executando docker container rm <CONTAINER ID>.

Por fim, você pode executar docker image ls -apara visualizar todas as imagens e excluir a que deseja executando docker image rm <hash>.

Usuário3301
fonte
2

Remover imagens da janela de encaixe>

Listar todos os contêineres

docker container ls

Listar todas as imagens

docker image ls

Parar contêiner por ID do contêiner

docker container stop <container_id>

Remover contêiner pelo ID do contêiner

docker container rm <container_id>

Se não quiser parar e remover, pode forçar a remoção

docker container rm -f <container_id>

Remover imagem

docker image rm <image_id>

Feito!

Anthony Piñero
fonte
2

liste todas as suas imagens do Docker:

docker images

listar todos os contêineres de docker existentes:

docker ps -a

exclua todos os contêineres de destino, usando a imagem que deseja excluir:

docker rm <container-id>

exclua a imagem segmentada:

docker rmi <image-name:image-tag or image-id>
Mhd Medfa
fonte
0

Remova apenas os contêineres associados a uma imagem específica

docker ps -a | grep training/webapp | cut -d ' ' -f 1 | xargs docker rm
  • ps -a: lista todos os contêineres
  • grep training / webapp: filtre tudo, exceto os contêineres, iniciados a partir da imagem training / webapp
  • cut -d '' -f 1: lista apenas os IDs do contêiner (primeiro campo quando delimitado por espaço)
  • xargs docker rm: envie a saída da lista de IDs do contêiner para o comando docker rm para remover o contêiner
AndrewD
fonte