Mise à jour de septembre 2016: Docker 1.13: PR 26108 et commit 86de7c0 introduisent quelques nouvelles commandes pour faciliter la visualisation de l'espace que les données du démon docker prennent sur le disque et permettant de nettoyer facilement l'excès «inutile».
docker system prune
supprimera TOUTES les données pendantes (c'est-à-dire dans l'ordre: conteneurs arrêtés, volumes sans conteneurs et images sans conteneurs). Même les données inutilisées, avec -a
option.
Vous avez aussi:
Pour les images inutilisées , utilisez docker image prune -a
(pour supprimer les images pendantes et non marquées).
Attention: « inutilisé » signifie «images non référencées par aucun conteneur»: soyez prudent avant utilisation -a
.
Comme illustré dans la réponse de AL , supprimera toutes les images inutilisées , pas seulement celles qui pendent ... ce qui peut être un peu trop.docker system prune --all
La combinaison docker xxx prune
avec l' --filter
option peut être un excellent moyen de limiter l'élagage ( docker SDK API 1.28 minimum, donc docker 17.04+ )
Les filtres actuellement pris en charge sont les suivants:
until (<timestamp>)
- supprimer uniquement les conteneurs, les images et les réseaux créés avant l'horodatage donné
label
( label=<key>
, label=<key>=<value>
, label!=<key>
, Ou label!=<key>=<value>
) - seulement retirer des récipients, des images, des réseaux et des volumes avec (ou sans , dans le cas où label!=...
est utilisé) , les étiquettes spécifiées.
Voir " Prune images " pour un exemple.
Réponse originale (sept. 2016)
Je fais habituellement:
docker rmi $(docker images --filter "dangling=true" -q --no-trunc)
J'ai un alias pour supprimer ces [images pendantes] 13 :drmi
Le dangling=true
filtre trouve les images inutilisées
De cette façon, toute image intermédiaire qui n'est plus référencée par une image étiquetée est supprimée.
Je fais la même chose d' abord pour les processus sortis (conteneurs)
alias drmae='docker rm $(docker ps -qa --no-trunc --filter "status=exited")'
Comme le souligne haridsv dans les commentaires :
Techniquement, vous devez d'abord nettoyer les conteneurs avant de nettoyer les images, car cela capturera plus d'images pendantes et moins d'erreurs .
Jess Frazelle (jfrazelle) a la fonction bashrc :
dcleanup(){
docker rm -v $(docker ps --filter status=exited -q 2>/dev/null) 2>/dev/null
docker rmi $(docker images --filter dangling=true -q 2>/dev/null) 2>/dev/null
}
Pour supprimer les anciennes images, et pas seulement les images "sans référence", vous pouvez envisager docker-gc
:
Un conteneur Docker simple et un script de récupération de place d'image.
- Les conteneurs sortis il y a plus d'une heure sont supprimés.
- Les images qui n'appartiennent à aucun conteneur restant après cela sont supprimées.
"dangling=true"
signifie réellement?dcleanup
est génial!docker system prune
supprime bien plus que des images. Assurez-vous d'utiliser à ladocker image prune
place. Et soyez très prudent avec-a
: undocker system prune -a
peut avoir un effet dévastateur (en supprimant également les volumes). Enfin, oui,-a
supprime les images inutilisées, je vais modifier la réponse.Mettre à jour le second (2017-07-08):
Reportez-vous (encore) à VonC, en utilisant le plus récent encore
system prune
. Les impatients peuvent sauter l'invite avec l'-f, --force
option:Les impatients et les imprudents peuvent en outre supprimer "les images inutilisées, pas seulement celles qui pendent" avec l'
-a, --all
option:https://docs.docker.com/engine/reference/commandline/system_prune/
Mise à jour:
Reportez-vous à la réponse de VonC qui utilise les
prune
commandes récemment ajoutées . Voici la commodité de l'alias de shell correspondant:Ancienne réponse:
Supprimer les conteneurs arrêtés (sortis):
Supprimez les images inutilisées (pendantes):
Si vous avez fait preuve d'une extrême prudence en ce qui concerne la perte de données irrévocable , vous pouvez supprimer les volumes inutilisés (pendants) (v1.9 et plus):
Les voici dans un alias de shell pratique:
Références:
docker ps -f
docker rm
docker images -f
docker rmi
docker volume ls
docker volume rm
la source
docker volume rm
recette. J'accueillerai vos suggestions.docker volume ls -qf dangling=true | egrep '^[a-z0-9]{64}$' | xargs --no-run-if-empty docker volume rm
qui fonctionnera tant que vous ne nommerez jamais vos volumes avec quelque chose de similaire à un guid. Je peux modifier cela pour la nouvelle syntaxe de filtre.Pour supprimer les anciennes images balisées datant de plus d'un mois:
Notez qu'il ne parviendra pas à supprimer les images utilisées par un conteneur, référencées dans un référentiel, qui ont des images enfants dépendantes ... ce qui est probablement ce que vous voulez. Sinon, ajoutez simplement le
-f
drapeau.Exemple de
/etc/cron.daily/docker-gc
script:la source
.CreatedSince
utilise des semaines comme unité de temps dans la sortie même sur des images vieilles de plusieurs semaines, par exemple12 weeks
.docker images | grep ' months' | awk '{ print $3 }' | xargs --no-run-if-empty docker rmi -f
Les autres réponses sont excellentes, en particulier:
Mais j'avais besoin de quelque chose au milieu des deux commandes, donc l'
filter
option était ce dont j'avais besoin:J'espère que cela pourra aider :)
Pour référence: https://docs.docker.com/config/pruning/#prune-images
la source
En supposant que vous avez Docker 1.13 ou supérieur, vous pouvez simplement utiliser les commandes de pruneau. Pour votre question spécifiquement pour supprimer les anciennes images, vous voulez la première.
Je recommanderais de ne pas vous habituer à utiliser la
docker system prune
commande. Je pense que les utilisateurs supprimeront accidentellement des choses qu'ils ne veulent pas. Personnellement, je vais principalement utiliser les commandesdocker image prune
etdocker container prune
.la source
docker system prune
mais les pruneaux individuels.Jusqu'à présent (Docker version 1.12), nous utilisons la commande suivante pour supprimer tous les conteneurs en cours d'exécution. De plus, si nous voulons supprimer les volumes, nous pouvons le faire manuellement en utilisant sa balise respective -v dans la commande suivante.
Supprimer tous les conteneurs sortis
Supprimer tous les conteneurs arrêtés
Supprimer tous les conteneurs en cours d'exécution et arrêtés
Retirez tous les conteneurs, sans aucun critère
Mais, dans la version 1.13 et supérieure, pour le système complet et le nettoyage, nous pouvons directement utiliser la commande suivante:
Tous les conteneurs, images, réseaux et volumes inutilisés seront supprimés. Nous pouvons également le faire en utilisant les commandes suivantes qui nettoient les composants individuels:
la source
Cela a fonctionné pour moi:
la source
La commande suivante supprimera les images de plus de 48 heures.
la source
docker image ls --all --filter reference=monolito --filter before=monolito:0.1.8
puis appliquer une commande rmi pour supprimer.docker rmi $(docker image ls -q --all --filter reference=monolito --filter before=monolito:0.1.8)
J'ai récemment écrit un script pour résoudre ce problème sur l'un de mes serveurs:
la source
Voici un script pour nettoyer les images Docker et récupérer l'espace.
Script original
https://github.com/vishalvsh1/docker-image-cleanup
Docker conserve généralement tous les fichiers temporaires liés à la création d'images et aux couches à
/ var / lib / docker
Ce chemin est local au système, généralement sur LA partition racine, "/" .
Vous pouvez monter un espace disque plus grand et déplacer le contenu de
/var/lib/docker
vers le nouvel emplacement de montage et créer un lien symbolique.De cette façon, même si les images Docker occupent de l'espace, cela n'affectera pas votre système car il utilisera un autre emplacement de montage.
Article d'origine: gérer les images Docker sur le disque local
la source
J'utilise cette commande:
Cela supprimera toutes les images dont le temps de création est supérieur à 10 semaines auparavant.
la source
IMAGE_CTIME
etBEFORE_DATETIME
dans cetteecho
commandeSi vous souhaitez supprimer des images extraites il y a X mois, vous pouvez essayer l'exemple ci-dessous qui supprime les images créées il y a trois mois:
la source
Pour tailler également toutes les images et tous les volumes
docker system prune -af --volumes
la source
docker system prune -a
(Vous serez invité à confirmer la commande. Utilisez
-f
pour forcer l'exécution, si vous savez ce que vous faites.)la source
docker system prune
suppression de volumes même nommés avec-a
.@VonC a déjà donné une très belle réponse, mais pour être complet, voici un petit script que j'utilise --- et qui annule également tous les processus de Docker si vous en avez:
la source
Error response from daemon: You cannot remove a running container
. Ajoutédocker kill $(docker ps -q)
avant la ligne 3 pour adresser$(docker images -q)
place de$(docker images | awk '/<none>/ { print $3 }')
?docker images -q
j'obtiens un vecteur d'identifiants d'image, rien d'autre. Si je fais ce que je fais, j'obtiens plus - me permettant de filtrer<none>
comme je le fais ici. Logique?Pour supprimer les images marquées qui n'ont pas de conteneur en cours d'exécution, vous devrez utiliser un petit script:
la source
Retirez les vieux conteneurs il y a des semaines.
docker rm $(docker ps -a | grep "weeks" | awk '{ print $1; }')
Supprimer les anciennes images il y a des semaines. Faites attention. Cela supprimera les images de base qui ont été créées il y a des semaines mais que vos nouvelles images pourraient utiliser.
docker rmi $(docker images | grep 'weeks' | awk '{ print $3; }')
la source
Comment supprimer une image balisée
docker rmi le tag en premier
docker rmi l'image.
# qui peut être fait en un seul appel docker rmi par exemple: # docker rmi <repo: tag> <imageid>
(cela fonctionne novembre 2016, Docker version 1.12.2)
par exemple
Par exemple, le script supprime tout élément datant de plus de 2 semaines.
la source
-f force
-un tout
-q dans le mode
la source
ou
la source
Parfois, j'ai rencontré des problèmes où Docker allouera et continuera à utiliser l'espace disque, même lorsque l'espace n'est pas alloué à une image particulière ou à un conteneur existant. La dernière façon dont j'ai généré ce problème accidentellement était d'utiliser la génération de centos "moteur docker" au lieu de "docker" dans RHEL 7.1. Ce qui semble se produire est parfois que les nettoyages des conteneurs ne sont pas terminés avec succès et que l'espace n'est jamais réutilisé. Lorsque le disque de 80 Go que j'ai alloué en tant que / était rempli de fichiers / var / lib / docker, j'ai dû trouver un moyen créatif de résoudre le problème.
Voici ce que j'ai trouvé. D'abord pour résoudre l'erreur de disque plein:
À ce stade, je n'avais plus d'erreur de disque plein, mais je gaspillais toujours une énorme quantité d'espace. Les prochaines étapes consistent à prendre soin de cela.
Démarrer Docker: systemctl start docker
Sauvegardez toutes les images: docker save $ (docker images | sed -e '/ ^ / d' -e '/ ^ REPOSITORY / d' -e 's, [] [] ,:,' -e 's, [ ]. ,, ')> /root/docker.img
Désinstaller docker.
Effacez tout dans / var / lib / docker: rm -rf / var / lib / docker / [cdintv] *
Réinstaller Docker
Activer le docker: systemctl activer le docker
Démarrer Docker: Systemctl Start Docker
Restaurer des images: chargement du docker </root/docker.img
Démarrez les conteneurs persistants dont vous avez besoin en cours d'exécution.
Cela a fait chuter mon utilisation du disque de 67 Go pour docker à 6 Go pour docker.
Je ne le recommande pas pour un usage quotidien. Mais il est utile de l'exécuter lorsqu'il semble que le docker a perdu la trace de l'espace disque utilisé en raison d'erreurs logicielles ou de redémarrages inattendus.
la source
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 l'image
meltwater/docker-cleanup
.Exécutez simplement:
Il s'exécute toutes les 30 minutes par défaut. Vous pouvez cependant définir le temps de retard en utilisant ce drapeau en secondes (option DELAY_TIME = 1800).
Plus de détails: https://github.com/meltwater/docker-cleanup/blob/master/README.md
la source
Si vous créez vous-même ces images élaguées (à partir d'autres images de base plus anciennes), veuillez faire attention aux solutions acceptées ci-dessus
docker image prune
, car la commande est émoussée et essaiera de supprimer également toutes les dépendances requises par vos dernières images (la commande doit être probablement renommé endocker image*s* prune
).La solution que j'ai trouvée pour mes pipelines de construction d'images Docker (où il y a des versions quotidiennes et des balises = les dates sont au
YYYYMMDD
format) est la suivante:la source
Il y a des images de docker-remove-dangling- plugin de moineau que vous pouvez utiliser pour nettoyer les conteneurs arrêtés et les images inutilisées (pendantes):
$ sparrow plg run docker-remove-dangling-images
Il fonctionne à la fois pour Linux et Windows OS.
la source
Tout d'abord, exécutez
docker images
pour voir la liste des images et copiez l'IMAGE HASH ID dans le presse-papiers.Courir
docker rmi -f <Image>
Rappelez-vous que l'option
-f
consiste à forcer la suppression.la source