Cette question est liée à Dois-je m'inquiéter de l'excès de conteneurs Docker non actifs? .
Je me demande comment retirer les vieux conteneurs. Le docker rm 3e552code34a
vous permet d'en supprimer un seul, mais j'en ai déjà beaucoup. docker rm --help
ne donne pas d'option de sélection (comme tout, ou par nom d'image).
Peut-être y a-t-il un répertoire dans lequel ces conteneurs sont stockés où je peux les supprimer facilement manuellement?
docker run
avec l'--rm
indicateur qui rendrait le conteneur éphémère, supprimant tous les fichiers de conteneur après l'exécution.docker system prune
commande. Voir ma réponse ci-dessous .Portainer
Nous pouvons gérerall the old containers, non using volumes and images
en utilisant cet outil C'est une interface utilisateur de gestion simple pour les dockersPlease refer my update below on how to deploy the application
Réponses:
Depuis Docker 1.13.x, vous pouvez utiliser le pruneau de conteneur Docker :
Cela supprimera tous les conteneurs arrêtés et devrait fonctionner sur toutes les plates-formes de la même manière.
Il existe également un pruneau système Docker :
qui nettoiera tous les conteneurs, réseaux, images inutilisés (à la fois suspendus et non référencés) et, éventuellement, les volumes, en une seule commande.
Pour les anciennes versions de Docker, vous pouvez enchaîner les commandes Docker avec d'autres commandes Unix pour obtenir ce dont vous avez besoin. Voici un exemple sur la façon de nettoyer les vieux conteneurs vieux de plusieurs semaines:
Pour donner du crédit, là où il est dû, cet exemple provient de https://twitter.com/jpetazzo/status/347431091415703552 .
la source
docker images | grep "<none>" | awk '{print $3}' | xargs docker rmi
-rm
option de suppression des conteneurs intermédiaires après une construction réussie.docker ps -a | awk 'NR > 1 {print $1}' | xargs docker rm
docker rmi $(docker images -q -f dangling=true)
Une autre méthode, que j'ai obtenue de Guillaume J. Charmes (crédit où elle est due):
supprimera tous les conteneurs d'une manière élégante.
Et par Bartosz Bilicki, pour Windows:
Pour PowerShell:
Une mise à jour avec Docker 1.13 (Q4 2016), crédit à VonC ( plus loin dans ce fil ):
docker system prune
supprimera TOUTES les données inutilisées (c'est-à-dire dans l'ordre: conteneurs arrêtés, volumes sans conteneurs et images sans conteneurs).Voir PR 26108 et commit 86de7c0 , qui introduisent quelques nouvelles commandes pour faciliter la visualisation de l'espace occupé par les données du démon Docker sur le disque et permettant de nettoyer facilement les excès "inutiles".
la source
docker ps -a -q | xargs docker rm
fonctionne, (sudo peut être nécessaire)docker rm $(docker ps -a -q)
?--no-trunc
cardocker rm
n'a de toute façon pas besoin d'identifiants complets.Mise à jour de la réponse Utilisez
docker system prune
oudocker container prune
maintenant. Voir la réponse mise à jour de VonC .Réponse précédente Composant plusieurs indices différents ci-dessus, la façon la plus élégante de supprimer tous les conteneurs non actifs semble être:
docker rm $(docker ps -q -f status=exited)
-q
affiche uniquement les identifiants des conteneurs (sans en-têtes de colonne)-f
vous permet de filtrer votre liste de conteneurs imprimés (dans ce cas, nous filtrons pour n'afficher que les conteneurs sortis)la source
-v
pour éviter des volumes ballants:docker rm -v $(docker ps -q -f status=exited)
. Voir docs.docker.com/userguide/dockervolumes/… pour plus de détails sur les volumes pendants.alias docker-gc="docker rm -v \$(docker ps -q -f status=exited)"
La voie officielle est:
Les responsables Docker ont indiqué qu'il n'y aurait pas de commande pour cela - et vous composez les commandes comme ça:
la source
docker volume
sous-commande et des volumes nommés.Avec Docker 1.13 (Q4 2016), vous avez désormais:
docker system prune -a
supprimera TOUTES les données inutilisées (c'est-à-dire dans l'ordre: conteneurs arrêtés, volumes sans conteneurs et images sans conteneurs).docker system prune
sans -a enlever (pour les images) que des images ou des images ballants, sans étiquette, comme commenté par smilebomb .Voir PR 26108 et commit 86de7c0 , qui introduisent quelques nouvelles commandes pour faciliter la visualisation de l'espace occupé par les données du démon Docker sur le disque et permettant de nettoyer facilement les excès "inutiles".
Comme commentaires wjv ,
Introduit dans commit 913e5cb , uniquement pour Docker 1.13+.
la source
-f
indicateur pour forcer le nettoyage sans poser de questions.docker system prune -a
, ce qui supprime les images inutilisées.docker system prune
supprime uniquement les images pendantes ou les images sans balise.Il est désormais possible d'utiliser le filtrage avec
docker ps
:Et pour les images :
Cependant, l'un de ces éléments entraînera
docker rm
oudocker rmi
générera une erreur lorsqu'il n'y a pas de conteneurs correspondants. L'docker rm $(docker ps -aq)
astuce plus ancienne était encore pire car elle tentait de supprimer tout conteneur en cours d'exécution, échouant sur chacun.Voici un script plus propre à ajouter dans votre
~/.bashrc
ou~/.profile
:Modifier: comme indiqué ci-dessous, la réponse originale était de supprimer les images, pas les conteneurs. Mis à jour pour répondre aux deux, y compris de nouveaux liens vers la documentation. Merci à Adrian (et à la réponse de Ryan) d'avoir mentionné le nouveau
ps
filtrage.la source
storage
conatiners.status=created
pour obtenir ceux qui ne sont pas en cours d'exécution et qui ne l'ont jamais été.MISE À JOUR 2019 (PLUS RÉCENT)
Cette - 2017 (OLD) façon
Pour supprimer TOUS LES CONTENANTS ARRÊTÉS
Pour supprimer TOUS LES CONTENANTS (ARRÊTÉS ET NON ARRÊTÉS)
la source
docker volume/container/image prune
, voir stackoverflow.com/a/39860665/3625317Retirez tous les conteneurs arrêtés:
D'après le commentaire de pauk960 :
la source
Si vous ne souhaitez pas supprimer tous les conteneurs, vous pouvez sélectionner tous les conteneurs créés avant ou après un conteneur spécifique avec
docker ps --before <container-ID>
ou avecdocker ps --since <container-ID>
. Cette fonctionnalité est au moins dans la version 0.6.5 de Docker.Supposons que vous ayez développé votre système et qu'il fonctionne maintenant, mais qu'il reste un certain nombre de conteneurs. Vous souhaitez supprimer les conteneurs créés avant cette version de travail. Déterminez l'ID du conteneur de travail avec
docker ps
.Supprimer les conteneurs créés avant un autre conteneur
Un autre exemple. Votre base de données fonctionne déjà sur un conteneur Docker. Vous avez développé votre application pour qu'elle s'exécute sur un autre conteneur et vous disposez désormais d'un certain nombre de conteneurs inutiles.
Supprimer les conteneurs créés après un certain conteneur
Docker stocke les conteneurs
/var/lib/docker/containers
dans Ubuntu. Je pense que les conteneurs supplémentaires ne font pas d'autre mal, mais prennent de l'espace disque.la source
Mise à jour: à partir de la version 1.13 de Docker (publiée en janvier 2017), vous pouvez exécuter la commande suivante pour nettoyer les conteneurs arrêtés, les volumes inutilisés, les images pendantes et les réseaux inutilisés:
Si vous voulez vous assurer que vous supprimez uniquement les conteneurs qui ont un
exited
statut, utilisez ceci:De même, si vous nettoyez des trucs de docker, vous pouvez vous débarrasser des images non marquées et sans nom de cette manière:
la source
Voici mon
docker-cleanup
script, qui supprime les conteneurs et les images non balisés. Veuillez vérifier la source pour toute mise à jour.Source: https://github.com/blueyed/dotfiles/blob/master/usr/bin/docker-cleanup
la source
xargs --no-run-if-empty
optionTout d'abord, arrêtez d'exécuter les conteneurs avant d'essayer de les supprimer
Supprimer les conteneurs en cours d'exécution
Vous pouvez utiliser à la
kill
place destop
. Dans mon cas, je préfèrestop
car j'ai tendance à les relancer plutôt qu'à en créer un nouveau à chaque fois, j'essaie donc de les fermer correctement.Remarque: Essayer d'arrêter un conteneur vous donnera une erreur:
Retirez tous les conteneurs
la source
Suppression de tous les conteneurs du shell Windows:
la source
https://github.com/HardySimpson/docker-cleanup
Nettoyage de Docker
Une toute petite coque tout-en-un, qui supprime:
Intention de s'exécuter en tant que tâche crontab
Fonctionnalité
<none>:<none>
images2>/dev/null
ou nonla source
Donc, personnellement, je recommande de le faire dans le cadre de votre script de déploiement pour les images et les conteneurs, en ne conservant que les n conteneurs et les images les plus récents. Je marque mes images Docker avec le même schéma de version que j'utilise et je marque
git tag
toujours la dernière image Docker avec «dernier». Cela signifie que sans rien nettoyer, mes images Docker ressemblent à:Maintenant, bien sûr, je ne veux pas que toutes mes images (ou conteneurs) reviennent à perpétuité sur toutes mes boîtes de production. Je veux juste les 3 ou 4 derniers annulations et me débarrasser de tout le reste. Unix
tail
est votre meilleur ami ici. Depuisdocker images
et lesdocker ps
deux par date, nous pouvons simplement utilisertail
pour sélectionner tous les trois sauf les trois et les supprimer:Exécutez cela avec vos scripts de déploiement (ou localement) pour toujours garder juste assez d'images pour revenir confortablement sans prendre trop de place ou encombrer les vieilles images.
Personnellement, je ne garde qu'un seul conteneur sur ma boîte de production à tout moment, mais vous pouvez faire la même chose avec des conteneurs si vous en voulez plus:
Enfin, dans mon exemple simplifié, nous ne traitons qu'avec un référentiel à la fois, mais si vous en aviez plus, vous pouvez simplement devenir un peu plus sophistiqué avec la même idée. Disons que je veux juste garder les trois dernières images de some_repo / some_image. Je peux mélanger dans
grep
etawk
et être sur mon chemin:Encore une fois, la même idée s'applique aux conteneurs, mais vous l'obtenez à ce stade, donc je vais arrêter de donner des exemples.
la source
Utilisation:
Il arrête et supprime de force tous les conteneurs présents localement.
la source
sudo docker rm -f $(sudo docker ps -a -q)
.sudo
c'est obligatoire partout sauf si vous ajoutez votre utilisateur au groupe 'docker'. J'utilise ubuntu 16.10 sans sudo en ajoutant mon utilisateur au groupe docker.Retirez les 5 conteneurs les plus anciens:
Voyez combien de conteneurs il reste:
la source
Retirez tous les conteneurs arrêtés.
Cela supprimera tous les conteneurs arrêtés en obtenant une liste de tous les conteneurs avec docker ps -a -q et en passant leurs identifiants à docker rm. Cela ne devrait supprimer aucun conteneur en cours d'exécution et vous indiquera qu'il ne peut pas supprimer une image en cours d'exécution.
Supprimer toutes les images non marquées
Maintenant, vous voulez nettoyer les anciennes images pour économiser de l'espace.
la source
docker ps -aq | xargs docker rm -v
docker rm -f $(docker ps -a -q)
fonctionne dans PowerShell / Docker pour Windows.Nouvelle façon: Spotify / Docker-GC joue le jeu.
Il a pris en charge les paramètres environnementaux
Forcer la suppression d'images comportant plusieurs balises
Forcer la suppression des conteneurs
Exclusion des conteneurs et des images récemment fermés de la récupération de place
Ce paramètre empêche également la suppression des images créées il y a moins de GRACE_PERIOD_SECONDS secondes.
Marche à sec
Nettoyage des volumes de conteneurs orphelins CLEAN_UP_VOLUMES = 1
Référence: docker-gc
Ancienne façon de faire:
supprimer les anciens conteneurs non actifs
supprimer toutes les images associées aux conteneurs Docker non exécutés
nettoyer les volumes Docker orphelins pour Docker version 1.10.x et supérieure
Basé sur une période de temps
la source
Supprimez tous les processus de docker:
Supprimer un conteneur spécifique:
la source
Vous pouvez utiliser la commande suivante pour supprimer les conteneurs sortis:
Voici l'essentiel pour supprimer également les anciennes images sur docker: Gist pour supprimer les anciens conteneurs et images Docker .
la source
la source
J'utilise toujours
docker rmi $(docker ps -a -q)
pour supprimer toutes les images.Vous pouvez supprimer le répertoire en
/var/lib/docker/graph
cas d'docker rmi
échec.la source
Vous ne pouvez supprimer que les conteneurs arrêtés. Arrêtez-les tous au début
docker stop $(docker ps -a -q)
Ensuite, vous pouvez supprimer
docker rm $(docker ps -a -q)
la source
Essayez cette commande pour nettoyer les conteneurs et les images pendantes.
la source
Les étapes de base pour arrêter / supprimer tous les conteneurs et images
Liste de tous les conteneurs
docker ps -aq
Arrêtez tous les conteneurs en cours d'exécution
docker stop $(docker ps -aq)
Retirez tous les conteneurs
docker rm $(docker ps -aq)
Supprimer toutes les images
docker rmi $(docker images -q)
Remarque: vous devez d'abord arrêter tous les conteneurs en cours d'exécution avant de les supprimer. Avant de supprimer une image, vous devez également arrêter et supprimer son ou ses conteneurs dépendants.
la source
Pour toute personne intéressée, j'ai pris l'exemple de qkrijger et l'ai transformé en un tout clair (arrêtez et supprimez tout)
la source
docker rm -f $(docker ps --no-trunc -aq)
c'est plus rapidela source
la source
J'utilise:
pour supprimer les conteneurs sortis et:
afin de se débarrasser de toutes les images non marquées.
la source