Comment puis-je supprimer les images de Docker?
j'ai les images suivantes:
alex@alexvps:~$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
<none> <none> 70c0e19168cf 5 days ago 1.069 GB
<none> <none> c2ce80b62174 8 days ago 399.2 MB
<none> <none> 60afe4036d97 8 days ago 325.1 MB
et quand j'essaie d'en enlever un je reçois:
alex@alexvps:~$ sudo docker rmi 60afe4036d97
Error: Conflict, 60afe4036d97 wasn't deleted
2014/01/28 00:54:00 Error: failed to remove one or more images
Comment puis-je les enlever? Pourquoi est-il un tel conflit?
14 réponses
pour supprimer toutes les images, utilisez la commande
docker rmi $(docker images -q)
pour supprimer tous les conteneurs, utilisez la commande
docker rm $(docker ps -a -q)
Avertissement: Cela détruira toutes vos images et les conteneurs. Il ne sera pas possible de les restaurer!
Cette solution est fournie par Techoverflow.net .
raison Possible: La raison peut être que cette image est actuellement utilisé par l'exécution d'un conteneur. Dans ce cas, vous pouvez lister les conteneurs en cours d'exécution, arrêter le conteneur concerné et ensuite supprimer l'image:
docker ps
docker stop <containerid>
docker rm <containerid>
docker rmi <imageid>
si vous ne trouvez pas de conteneur par docker ps, vous pouvez l'utiliser pour lister tous les conteneurs déjà sortis et les enlever.
docker ps -a | grep 60afe4036d97
docker rm <containerid>
Note: attention de supprimer tous les conteneurs sortis en une seule fois dans le cas où vous utilisez des conteneurs Volume-Only
. Ceux-ci restent dans l'état Exit
, mais contient des données utiles .
la raison de l'erreur est que même si l'image n'avait aucune étiquette, il existe toujours un conteneur créé sur cette image qui pourrait être dans l'état exited
. Donc, vous devez vous assurer que vous avez arrêté et supprimé tous les conteneurs créés sur ces images. La commande suivante vous aide à retirer tous les conteneurs qui ne fonctionnent pas:
docker rm `docker ps -aq --no-trunc --filter "status=exited"`
maintenant, cela supprime toutes les images non intermédiaires pendantes <none>
:
docker rmi `docker images --filter 'dangling=true' -q --no-trunc`
Note: pour arrêter tous les conteneurs en marche:
docker stop `docker ps -q`
dans bash:
for i in `sudo docker images|grep \<none\>|awk '{print }'`;do sudo docker rmi $i;done
cela permettra d'éliminer toutes les images avec le nom "". j'ai trouvé ces images redondantes.
l'image peut être actuellement utilisée par un conteneur en cours d'exécution, donc vous devez d'abord arrêter et enlever le(s) conteneur (s).
docker stop <container-name>
docker rm <container-id>
alors vous pourriez essayer de supprimer l'image:
docker rmi <image-id>
Vous devez être sûr que cette image ne dépend pas d'autres images (sinon, vous devez les supprimer en premier).
j'ai eu un cas étrange dans lequel je n'avais plus de conteneurs encore vivants ( docker ps -a
rien retourné) mais je ne pouvais pas gérer la suppression de l'image et de l'image de la dépendance.
pour résoudre ces cas spéciaux, vous pouvez forcer le retrait de l'image avec ceci:
docker rmi -f <image-id>
j'ai trouvé la réponse dans cette commande:
docker images --no-trunc | grep none | awk '{print }' | xargs docker rmi
j'ai eu votre problème quand j'ai supprimé certaines images qui étaient utilisées et je ne m'en suis pas rendu compte (en utilisant docker ps -a
).
depuis Docker ver. 1.13.0 (janvier 2017) il y a la commande system prune
:
$ docker system prune --help
Usage: docker system prune [OPTIONS]
Remove unused data
Options:
-a, --all Remove all unused images not just dangling ones
-f, --force Do not prompt for confirmation
--help Print usage
premièrement, retirer tous les conteneurs en utilisant la commande suivante:
sudo docker ps -a -q | xargs -n 1 -I {} sudo docker rm {}
ensuite, supprimez l'image par son ID en utilisant la commande suivante
sudo docker rmi <image-id>
vous devez arrêter/supprimer tous les conteneurs inutiles créés sur ces images en premier.
Avoir un coup d'oeil: Comment supprimer de vieux conteneurs Docker .
après cela, utilisez la solution @marcell.
enlever tous les conteneurs
docker ps -q -a | xargs docker rm
Force supprimer toutes les images docker
docker rmi -f $(docker images -f dangling=true -q)
la version la plus compacte de la commande pour supprimer toutes les images non étiquetées est:
docker rmi $(docker images | grep "^<none>" | awk '{print $"3"}')
si vous souhaitez nettoyer automatiquement/périodiquement les conteneurs sortis et supprimer les images et les volumes qui ne sont pas utilisés par un conteneur en cours d'exécution, vous pouvez télécharger cette image meltwater/docker-cleanup.
de cette façon, vous n'avez pas besoin d'aller nettoyer à la main
il suffit d'exécuter:
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
il s'exécute toutes les 30min (ou aussi longtemps que vous le paramétrez en utilisant L'option DELAY_TIME=1800) et nettoie les conteneurs et les images sortis.
plus de détails: https://github.com/meltwater/docker-cleanup/blob/master/README.md
pour supprimer une image de Docker, vous devez exécuter la commande suivante:
$ docker rmi <docker_image_id>
donc, pour supprimer toutes les images de Docker vous pouvez exécuter la commande suivante:
$ docker rmi $(docker images -q)
maintenant, si vous voulez supprimer toutes les images de Docker (y compris les images qui sont en usage), vous pouvez ajouter le drapeau-f, par exemple:
$ docker rmi -f $(docker images -q)
, vous pouvez deru --force
à la fin de la commande. comme :
sudo docker rmi <docker_image_id> --force
pour en savoir plus intelligent vous pouvez ajouter comme:
sudo docker stop $(docker ps | grep <your_container_name> | awk '{print }')
sudo docker rm $(docker ps | grep <your_container_name> | awk '{print }')
sudo docker rmi $(docker images | grep <your_image_name> | awk '{print }') --force
ici dans docker ps
1 $ est la 1ère colonne C.-à-d. numéro d'identification du conteneur docker
et docker images
3 $ est la 3e colonne C.-à-d. docker image id