web-dev-qa-db-fra.com

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 est-ce que je peux les retirer? Pourquoi y a-t-il un tel conflit?

256
alexyz78

Afin de supprimer toutes les images, utilisez la commande donnée

docker rmi $(docker images -q)

Pour supprimer tous les conteneurs, utilisez la commande donnée

docker rm $(docker ps -a -q)

Avertissement: Ceci détruira toutes vos images et vos conteneurs. Il ne sera pas possible de les restaurer!

Cette solution est fournie par Techoverflow.net .

463
user1378912

Raison possible: La raison peut être que cette image est actuellement utilisée par un conteneur en cours d'exécution. Dans ce cas, vous pouvez répertorier les conteneurs en cours d'exécution, arrêter le conteneur approprié, puis supprimer l'image:

docker ps
docker stop <containerid>
docker rm <containerid>
docker rmi <imageid>

Si vous ne trouvez pas de conteneur à l'aide du menu fixe docker, vous pouvez l'utiliser pour répertorier tous les conteneurs déjà sortis et les supprimer.

docker ps -a | grep 60afe4036d97
docker rm <containerid>

Remarque: Faites attention à supprimer tous les conteneurs sortis en même temps si vous utilisez Volume-Only conteneurs. Ceux-ci restent dans l'état Exit, mais contient des données utiles.

98
Jiri

La raison de l’erreur est que, même si l’image ne comportait aucune balise, il existait toujours un conteneur créé sur cette image, susceptible de se trouver dans l’état exited. Vous devez donc vous assurer que vous avez arrêté et supprimé tous les conteneurs créés sur ces images. La commande suivante vous aide à supprimer tous les conteneurs qui ne s'exécutent pas:

docker rm `docker ps -aq --no-trunc --filter "status=exited"`

Maintenant, cela supprime toutes les images <none> non intermédiaires:

docker rmi `docker images --filter 'dangling=true' -q --no-trunc`

Remarque: Pour arrêter tous les conteneurs en cours d'exécution:

docker stop `docker ps -q`
60
eldos

Dans Bash:

for i in `Sudo docker images|grep \<none\>|awk '{print $3}'`;do Sudo docker rmi $i;done

Cela supprimera toutes les images avec le nom "<aucun>". J'ai trouvé ces images redondantes.

19
marcell

L’image pouvant actuellement être utilisée par un conteneur en cours d’exécution, vous devez d’abord arrêter et supprimer le ou les conteneurs.

docker stop <container-name>
docker rm <container-id>

Ensuite, vous pouvez 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 d'abord les supprimer).

J'ai eu un cas étrange dans lequel je n'avais plus de conteneurs en vie (docker ps -a n'a rien retourné) mais je n'ai pas réussi à supprimer l'image et sa dépendance d'image.

Pour résoudre ces cas particuliers, vous pouvez forcer la suppression d'image avec ceci:

docker rmi -f <image-id>
18
madx

J'ai trouvé la réponse dans cette commande:

docker images --no-trunc | grep none | awk '{print $3}' | xargs docker rmi

J'ai eu votre problème lorsque j'ai supprimé des images en cours d'utilisation et je ne m'en suis pas rendu compte (avec docker ps -a).

15
ivangoblin

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
9
alexyz78

Tout d'abord, supprimez tous les conteneurs à l'aide de 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>
6
Muheed

En plus de la réponse de Sunny:

Pour supprimer toutes les images sur une machine Windows (avec Docker pour Windows) dans une fenêtre PowerShell, procédez comme suit:

docker images -q | %{docker rmi -f $_}

Afin de supprimer tous les conteneurs sur une machine Windows (avec Docker pour Windows) dans une fenêtre PowerShell, procédez comme suit:

docker ps -a -q | %{docker rm -f $_}
5
Paul Vogel

Vous devez d'abord arrêter/supprimer tous les conteneurs inutiles créés sur ces images.

Jetez un coup d'oeil: Comment enlever les vieux conteneurs Docker .

Après cela, utilisez la solution @marcell.

4
tgrigoryan

Retirez tous les conteneurs

docker ps -q -a | xargs docker rm

Force supprime toutes les images Docker

docker rmi -f $(docker images -f dangling=true -q)
4

Vous pouvez simplement ajouter --force à la fin de la commande. Comme:

Sudo docker rmi <docker_image_id> --force

Pour le rendre plus intelligent vous pouvez ajouter en tant que:

Sudo docker stop $(docker ps | grep <your_container_name> | awk '{print $1}')

Sudo docker rm $(docker ps | grep <your_container_name> | awk '{print $1}')

Sudo docker rmi $(docker images | grep <your_image_name> | awk '{print $3}') --force

Ici dans docker ps $ 1 est la première colonne, c’est-à-dire l’ID du conteneur Docker.

Et docker images $ 3 est la troisième colonne, c’est-à-dire l’ID d’image de Docker.

4
kushalbhattad

Utilisation

docker image Prune -all

ou

docker image Prune -a

Supprimez toutes les images pendantes. Si -a est spécifié, toutes les images non référencées par un conteneur seront également supprimées.

Remarque: Vous êtes invité à confirmer avant que le pruneau ne supprime quoi que ce soit, mais aucune liste de ce qui sera potentiellement supprimé ne s'affiche. De plus, docker image ls ne prend pas en charge le filtrage négatif, il est donc difficile de prédire quelles images seront réellement supprimées.

Comme indiqué sous documentation de Docker pour Prune .

3
Dylan

La version la plus compacte d'une commande permettant de supprimer toutes les images non étiquetées est la suivante:

docker rmi $(docker images | grep "^<none>" | awk '{print $"3"}')
3
red

Pour supprimer une image Docker, vous devez exécuter la commande suivante:

$ docker rmi <docker_image_id>

Donc, pour supprimer toutes les images Docker, vous pouvez exécuter la commande suivante:

$ docker rmi $(docker images -q)

Maintenant, si vous souhaitez supprimer toutes les images Docker (y compris les images en cours d'utilisation), vous pouvez ajouter l'indicateur -f, par exemple:

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

Si vous souhaitez nettoyer automatiquement/périodiquement les conteneurs supprimés 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 l'image Docker meltwater/docker-cleanup.

De cette façon, vous n'avez pas besoin d'aller le nettoyer à la main.

Il suffit de courir:

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écutera toutes les 30 minutes (ou quelle que soit la durée choisie à l'aide de l'option DELAY_TIME = 1800) et nettoiera les conteneurs et les images sortis.

Plus de détails: https://github.com/meltwater/docker-cleanup/blob/master/README.md

1
Innocent Anigbo

J'ai trouvé une solution avec le script Powershell qui le fera pour moi.

Le script arrête d’abord tous les conteneurs puis supprime tous les conteneurs, puis supprime les images nommées par l’utilisateur.

Regardez ici http://www.devcode4.com/article/powershell-remove-docker-containers-and-images

0
Petofi