l'image est utilisée par le conteneur arrêté

94

J'essaye de supprimer un conteneur de docker par cette commande:

docker rmi <Image-Id>

Évidemment, j'ai remplacé l'ID d'image par l'ID que j'utilise:

docker images

Mais je vois l'erreur ci-dessous:

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

Réponses:

121

Vous pouvez également utiliser --force , -fForcer la suppression de l'image

Si vous utilisez l'indicateur -f et spécifiez l'ID court ou long de l'image, cette commande dégage et supprime toutes les images qui correspondent à l'ID spécifié.

  docker rmi -f <image_id> 
Adiii
la source
1
Merci, cela a bien fonctionné mais il y a un problème. J'ai supprimé une image de 10 Go mais après l'avoir supprimée, je ne vois aucun changement dans mon espace disque libre.
Mehrdad Babaki
1
avez-vous supprimé les volumes attachés avec l'image et avez-vous vérifié la taille de l'image de chacun
Adiii
1
Pas vraiment, je suis nouveau dans docker. Je vais essayer l'outil, puis-je utiliser la ligne de commande pour détecter le volume et le supprimer?
Mehrdad Babaki
1
oui volume docker ls; pour lister le volume et pour supprimer, docker volume rm v_id
Adiii
40

Vous devez supprimer le conteneur arrêté avec docker rm, puis vous pouvez supprimer l'image qu'il utilise avec docker rmi.

David Maze
la source
3
Cela fait partie de toute réponse complète. Vous pouvez soit forcer la suppression, soit supprimer l'image arrêtée.
bmacnaughton
28

Vous pouvez également constater que vous avez arrêté les conteneurs qui provoquent le verrouillage. Supprimez-les d'abord en utilisant:

docker rm  $(docker ps -q -a)

Ici, nous listons les processus docker uniquement par l'ID, puis nous les supprimons; cependant, docker rm ne supprimera que les conteneurs arrêtés.

Ensuite, revenez en arrière et supprimez les images en utilisant:

docker image rm <image_id>
Angus
la source
22

Vous devez d'abord supprimer le conteneur.
Forcé est la dernière méthode à adopter.

#check container
docker ps -a

#remove container
docker rm containerID
Hideyasu.T
la source
3
Clairement la meilleure réponse. Le seul qui explique comment obtenir la liste des conteneurs arrêtés.
Marco
4

Au cas où docker rmi <image-id>cela ne fonctionnerait pas, essayez ceci:

Arrêtez tous les conteneurs en cours d'exécution

docker stop $(docker ps -aq)

Retirer tous les conteneurs

docker rm $(docker ps -aq)

Supprimer toutes les images

docker rmi $(docker images -q)
Arilwan
la source
3

En plus des autres réponses, j'ai eu le même problème avec Docker pour Mac mais je docker ps -an'ai montré aucun conteneur en cours d'exécution. Exécution de docker imagesspectacles:

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

Toutes ces images sont utilisées par l'application Docker si Kubernetes est activé. Dans les préférences de Docker pour Mac, il existe une section pour Kubernetes. Si vous cliquez sur "Afficher les conteneurs système (avancés)", ils apparaîtront dansdocker ps .

Si vous souhaitez supprimer ces images, vous devez désactiver Kubernetes via l'application Docker pour Mac, puis réessayer.

Eric
la source
2

Les conteneurs Docker s'exécutent sur les images Docker, vous ne pouvez supprimer une image que si elle n'est attachée à aucun conteneur.! Vous devez donc arrêter le conteneur et supprimer le conteneur, puis vous pouvez supprimer l'ID d'image.

docker stop container-id et docker rm container-id

Ensuite, essayez de supprimer le docker d'image rmi image-id

Quelques informations supplémentaires fournies dans le lien ci-dessous. À votre santé.!

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

Surya Kiran
la source
Cela devrait être la bonne réponse après le processus d'arrêt du conteneur (docker-compose stop) -> supprimer le conteneur (docker rm <nom du conteneur>) -> supprimer les images associées (docker rmi <id_image>).
kta
1

Si l'objectif est de récupérer de l'espace disque, une autre approche non encore mentionnée consiste à utiliser docker system prune. Il imprimera un avertissement qui doit être pris en compte:

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

Cela ne supprimera pas les images nommées, mais purgera les images intermédiaires sans nom. Selon la taille des conteneurs que vous utilisez, cela peut économiser une quantité considérable d'espace disque.

Edward
la source
0

Si vous avez changé dans le Dockerfileet si vous utilisez docker compose, vous pouvez simplement reconstruire votre image en l'exécutant docker-compose avec l' --buildoption!

ans1genie
la source
Si vous avez apporté des modifications sur le, Dockerfilevous ne devez pas supprimer l'image vous-même, utilisez simplement le drapeau --buildavec docker-composepour qu'il reconstruise une nouvelle image avec les modifications
ans1genie