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?