Question Comment enlever les vieux conteneurs Docker


Cette question est liée à Devrais-je m'inquiéter de l'excès de contenants Docker qui ne fonctionnent pas?.

Je me demande comment enlever les vieux contenants. le docker rm 3e552code34a vous permet de 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 qu'il y a un répertoire dans lequel ces conteneurs sont stockés où je peux les supprimer facilement manuellement?


985
2018-06-21 13:41


origine


Réponses:


Il y a une nouvelle fonctionnalité dans Docker 1.13.x appelé Docker container prune: docker container prune

Cela fera ce que vous voulez et devrait fonctionner sur toutes les plateformes de la même manière.

Il y a aussi Pruneau du système Docker: docker system prune, qui nettoie les conteneurs, les images, les volumes et les réseaux en une seule commande.

Réponse originale:

Il a été question d'une commande de nettoyage Docker. Vous pouvez trouver les informations sur ce ticket: Implémenter une commande 'clean' (# 928)

Jusqu'à ce que cette commande soit disponible, 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 qui sont vieux de plusieurs semaines:

$ docker ps --filter "status=exited" | grep 'weeks ago' | awk '{print $1}' | xargs --no-run-if-empty docker rm

Pour donner crédit, où il est dû, cet exemple est de https://twitter.com/jpetazzo/status/347431091415703552.


1100
2018-06-21 14:25



Une autre méthode, que j'ai obtenue de Guillaume J. Charmes (crédit où elle est due):

docker rm `docker ps --no-trunc -aq`

va enlever tous les conteneurs d'une manière élégante.

Et par Bartosz Bilicki, pour Windows:

FOR /f "tokens=*" %i IN ('docker ps -a -q') DO docker rm %i

Pour PowerShell:

docker rm @(docker ps -aq)

Une mise à jour avec Docker 1.13 (T4 2016), crédit à VonC (plus tard 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 commenter 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 permettent de nettoyer facilement les excès inutiles.

docker system prune

WARNING! This will remove:
    - all stopped containers
    - all volumes not used by at least one container
    - all images without at least one container associated to them
Are you sure you want to continue? [y/N] y

579
2017-08-09 06:41



Réponse mise à jour Utilisation docker system prune ou docker container prune à présent. Voir La réponse mise à jour de VonC.

Réponse précédente Composer plusieurs conseils différents ci-dessus, la façon la plus élégante d'enlever tous les conteneurs non-fonctionnement semble être:

docker rm $(docker ps -q -f status=exited)

  • -q imprime uniquement les identifiants de conteneur (sans les en-têtes de colonne)
  • -f vous permet de filtrer votre liste de conteneurs imprimés (dans ce cas, nous filtrons pour afficher uniquement les conteneurs sortis)

385
2018-04-06 15:34



La voie officielle est:

docker rm `docker ps -aq`

Les responsables du Docker ont indiqué qu'il n'y aurait pas de commande pour cela - et vous composez les commandes comme ça:

Nous en avons discuté auparavant et nous recommandons aux utilisateurs d'utiliser la ligne ci-dessus sans avoir à ajouter de code supplémentaire à Docker.


241
2018-06-18 04:23



Avec Docker 1.13 (T4 2016), vous avez maintenant:

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 supprimera (pour les images) uniquement les images qui pendent, ou les images sans étiquette, comme commenté par smilebomb.

Voir PR 26108 et commenter 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 permettent de nettoyer facilement les excès inutiles.

docker system prune -a

WARNING! This will remove:
    - all stopped containers
    - all volumes not used by at least one container
    - all images without at least one container associated to them
Are you sure you want to continue? [y/N] y

Comme wjv commentaires,

Il y a aussi docker {container,image,volume,network} prune, qui peut être utilisé pour supprimer les instances inutilisées un type d'objet.

Introduit dans commenter 913e5cb, seulement pour Docker 1.13+.

docker container prune

104
2017-10-04 19:51



Il est maintenant possible d'utiliser filtration avec docker ps:

docker rm $(docker ps -q -f status=exited)

Et pour images:

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

Cependant, l'un d'entre eux causera docker rm ou docker rmi pour lancer une erreur lorsqu'il n'y a pas de conteneurs correspondants. Le plus vieux docker rm $(docker ps -aq) L'astuce était encore pire car elle essayait d'enlever n'importe quel conteneur en cours, échouant à chacun.

Voici un script plus propre à ajouter dans votre ~/.bashrc ou ~/.profile :

# Use `docker-cleanup --dry-run` to see what would be deleted.

function docker-cleanup {
  EXITED=$(docker ps -q -f status=exited)
  DANGLING=$(docker images -q -f "dangling=true")

  if [ "$1" == "--dry-run" ]; then
    echo "==> Would stop containers:"
    echo $EXITED
    echo "==> And images:"
    echo $DANGLING
  else
    if [ -n "$EXITED" ]; then
      docker rm $EXITED
    else
      echo "No containers to remove."
    fi
    if [ -n "$DANGLING" ]; then
      docker rmi $DANGLING
    else
      echo "No images to remove."
    fi
  fi
}

Edit: Comme indiqué ci-dessous, la réponse originale était pour supprimer des images, pas des conteneurs. Mis à jour pour répondre aux deux, y compris les nouveaux liens vers la documentation. Merci à Adrian (et à la réponse de Ryan) d'avoir mentionné le nouveau ps filtration.


100
2018-06-23 02:07



ACTUALISÉ  2017 (NOUVEAU)

docker container prune

Ce - 2017 (VIEIL)

Retirer TOUS CONTENEURS ARRÊTÉS 

docker rm $(docker ps -a -q)

Retirer TOUTES LES CONTENEURS  (ARRÊTÉ ET NON ARRÊTÉ)

docker rm  -f $(docker ps -a -q)

87
2017-08-08 20:37