imagem está sendo usada por contêiner parado

100

Estou tentando excluir um contêiner do docker com este comando:

docker rmi <Image-Id>

Obviamente, substituí o Id da imagem pelo Id que recebo usando:

docker images

Mas vejo o erro abaixo:

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

Respostas:

129

Você também pode usar --force , -fForçar remoção da imagem

Se você usar o sinalizador -f e especificar o ID curto ou longo da imagem, este comando desmarca e remove todas as imagens que correspondem ao ID especificado.

  docker rmi -f <image_id> 
Adiii
fonte
1
Obrigado, funcionou bem, mas há um problema. Excluí uma imagem de 10 GB, mas depois de excluí-la, não consigo ver nenhuma alteração no meu espaço livre em disco.
Mehrdad Babaki
1
você removeu os volumes anexados à imagem e verificou o tamanho da imagem de cada um
Adiii
1
Na verdade não, sou novo no docker. Vou experimentar a ferramenta. Pela maneira, posso usar a linha de comando para detectar o volume e removê-los?
Mehrdad Babaki
1
sim docker volume ls; para listar o volume e remover, docker volume rm v_id
Adiii
42

Você precisa excluir o contêiner interrompido com docker rme, em seguida, pode excluir a imagem com que ele usa docker rmi.

David Maze
fonte
3
Isso faz parte de qualquer resposta completa. Você pode forçar a remoção ou excluir a imagem parada.
bmacnaughton
31

Você também pode descobrir que parou os contêineres que estão causando o bloqueio. Remova-os primeiro usando:

docker rm  $(docker ps -q -a)

Aqui estamos listando os processos do docker apenas pelo ID e removendo-os; no entanto, docker rm removerá apenas contêineres parados.

Em seguida, volte e remova as imagens usando:

docker image rm <image_id>
Angus
fonte
23

Você deve remover o recipiente primeiro.
Forçado é o último método a ser usado.

#check container
docker ps -a

#remove container
docker rm containerID
Hideyasu.T
fonte
3
Claramente a melhor resposta. O único que explica como obter a lista de container parado.
Marco
4

Caso docker rmi <image-id>não funcione, tente o seguinte:

Pare todos os contêineres em execução

docker stop $(docker ps -aq)

Remova todos os recipientes

docker rm $(docker ps -aq)

Remover todas as imagens

docker rmi $(docker images -q)
Arilwan
fonte
3

Além das outras respostas, tive o mesmo problema ao usar o Docker para Mac, mas docker ps -anão mostrei nenhum contêiner em execução. Programas em execução docker images:

docker/desktop-storage-provisioner   v1.0                605a0f683b7b        2 months ago        33.1MB
k8s.gcr.io/kube-controller-manager   v1.15.5             1399a72fa1a9        6 months ago        159MB
k8s.gcr.io/kube-proxy                v1.15.5             cbd7f21fec99        6 months ago        82.4MB
k8s.gcr.io/kube-apiserver            v1.15.5             e534b1952a0d        6 months ago        207MB
k8s.gcr.io/kube-scheduler            v1.15.5             fab2dded59dd        6 months ago        81.1MB
docker/kube-compose-controller       v0.4.23             a8c3d87a58e7        11 months ago       35.3MB
docker/kube-compose-api-server       v0.4.23             f3591b2cb223        11 months ago       49.9MB
k8s.gcr.io/coredns                   1.3.1               eb516548c180        16 months ago       40.3MB
k8s.gcr.io/etcd                      3.3.10              2c4adeb21b4f        17 months ago       258MB
k8s.gcr.io/pause                     3.1                 da86e6ba6ca1        2 years ago         742kB

Todas essas imagens são usadas pelo aplicativo Docker se você tiver o Kubernetes ativado. Nas preferências do Docker para Mac, há uma seção para Kubernetes. Se você clicar em "Mostrar contêineres do sistema (avançado)", eles aparecerão em docker ps.

Se você deseja excluir essas imagens, desative o Kubernetes por meio do aplicativo Docker para Mac e tente novamente.

Eric
fonte
2

Os contêineres do Docker são executados sobre as imagens do docker, você pode excluir uma imagem apenas se ela não estiver anexada a nenhum contêiner.! Então você tem que parar o contêiner e remover o contêiner, então você pode remover o id da imagem.

docker stop container-id e docker rm container-id

Em seguida, tente remover image docker rmi image-id

Algumas informações extras fornecidas no link abaixo. Felicidades.!

https://docs.docker.com/config/pruning/

Surya Kiran
fonte
Esta deve ser a resposta correta após o processo de parar o contêiner (docker-compose stop) -> remover o contêiner (docker rm <nome do contêiner>) -> remover as imagens associadas (docker rmi <image_id>).
kta
1

Se o objetivo é recuperar espaço em disco, outra abordagem ainda não mencionada é usar docker system prune. Irá imprimir um aviso que deve ser observado:

WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all dangling images
  - all dangling build cache

Isso não excluirá as imagens nomeadas, mas eliminará as imagens intermediárias sem nome. Dependendo dos tamanhos dos contêineres que você está usando, isso pode economizar uma quantidade considerável de espaço em disco.

Edward
fonte
0

Se você mudou no Dockerfilee se está usando o docker compose, você pode simplesmente reconstruir sua imagem executando docker-compose com a --buildopção!

ans1genie
fonte
Se você fez qualquer alteração no, Dockerfilenão deve remover a imagem sozinho, apenas use o sinalizador --buildcom docker-composepara que ele reconstrua uma nova imagem com as alterações
ans1genie