Comment supprimer les anciens conteneurs Docker


1235

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 3e552code34avous permet d'en supprimer un seul, mais j'en ai déjà beaucoup. docker rm --helpne 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?


21
Vous devriez également envisager de nettoyer les volumes de docker orphelins. Je trouve souvent qu'ils consomment beaucoup plus d'espace que les vieux conteneurs et les vieilles images. Un bon script pour supprimer les volumes dockers orphelins est disponible sur: github.com/chadoe/docker-cleanup-volumes .
Nemanja Trifunovic

Peut-être que github.com/chadoe/docker-cleanup-volumes peut vous aider.
Mihai8

Vous pouvez également l'utiliser docker runavec l' --rmindicateur qui rendrait le conteneur éphémère, supprimant tous les fichiers de conteneur après l'exécution.
Gordon

12
Avec docker 1.13 (Q4 2016), vous pouvez également envisager la nouvelle docker system prunecommande. Voir ma réponse ci-dessous .
VonC

1
Utiliser l'outil de gestion des dockers Portainer Nous pouvons gérer all the old containers, non using volumes and imagesen utilisant cet outil C'est une interface utilisateur de gestion simple pour les dockers Please refer my update below on how to deploy the application
Anish Varghese

Réponses:


1460

Depuis Docker 1.13.x, vous pouvez utiliser le pruneau de conteneur Docker :

docker container prune

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 :

docker system prune

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:

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

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


92
Commande similaire pour supprimer toutes les images non marquées: docker images | grep "<none>" | awk '{print $3}' | xargs docker rmi
Mohan Raj

7
@ MichelMüller lors de la création d'une image à partir d'un dockerfile, vous pouvez spécifier l' -rmoption de suppression des conteneurs intermédiaires après une construction réussie.
Freek Kalter

3
@ MichelMüller, ce sont les images qui sont utilisées pour la mise en cache, donc la suppression des conteneurs n'affectera pas cela.
Ken Cochrane

7
Si vous voulez utiliser awk pour cela, considérez cette commande si vous voulez faire rm tous les conteneurs arrêtés (sans erreur à cause de la première ligne):docker ps -a | awk 'NR > 1 {print $1}' | xargs docker rm
masi

3
Cela devrait être la commande mise à jour pour supprimer les images non docker rmi $(docker images -q -f dangling=true)
marquées

626

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`

supprimera 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 (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".

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

11
cela ne fonctionne pas en quelque sorte pour moi, mais docker ps -a -q | xargs docker rmfonctionne, (sudo peut être nécessaire)
FUD

86
qu'en est-il docker rm $(docker ps -a -q)?
qkrijger

8
@qkrijger, cela ne change rien à votre réponse d'origine, à l'exception de l'ajout de bashism. Le problème vient du débordement de la ligne de commande. La variante xargs le traite d'une manière agréable. J'ajouterais également --no-trunk à docker ps pour éviter les conflits d'identité (improbables).
Ihor Kaharlichenko

8
sachez que si vous utilisez un conteneur de données uniquement, il les supprimera également
Dzung Nguyen

4
Je ne vois pas le point avec --no-trunccar docker rmn'a de toute façon pas besoin d'identifiants complets.
Pithikos

411

Mise à jour de la réponse Utilisez docker system pruneou docker container prunemaintenant. 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)

7
Cela devrait être la bonne réponse car elle s'appuie sur docker pour vous dire quels conteneurs ne sont plus utilisés, plutôt que de supposer que le format de sortie texte de $ (images docker) ne changera pas. Des points bonus pour engendrer un seul processus supplémentaire au lieu de deux.
eurythmie

18
Vous pouvez ajouter -vpour é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.
rluba

@rluba apparemment dans Docker 1.9, il y aura une API de volume distincte pour gérer ce problème. github.com/docker/docker/pull/14242
Ryan Walls

un alias pourrait être utile:alias docker-gc="docker rm -v \$(docker ps -q -f status=exited)"
Frank Neblung

Contrairement à la réponse marquée correcte, la réponse @RyanWalls fonctionne sur OSX tout en étant plus concise.
Ray

255

La voie officielle est:

docker rm `docker ps -aq`

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

Nous avons déjà discuté de cela et préférons que les utilisateurs utilisent la ligne ci-dessus sans avoir à ajouter de code supplémentaire à Docker.


6
C'est une mauvaise solution, car elle supprimera également les conteneurs de stockage.
Sobrique

8
Que voulez-vous dire par «conteneurs de stockage»? Si vous voulez dire des conteneurs de données uniquement qui étaient autrefois utilisés pour conserver des références aux volumes de données, ceux-ci ne sont plus nécessaires en raison de la disponibilité de la docker volumesous-commande et des volumes nommés.
L0j1k

Notez que cela ne fonctionnera pas dans Windows Powershell. Pour cela, c'est une meilleure solution: stackoverflow.com/a/23674294/1150683
Bram Vanroy

@Sobrique Si vous ne réagissez pas, vous devriez au moins supprimer votre commentaire, c'est un non-sens presque complet et nuisible.
peterh

128

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 prunesans -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".

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 commentaires wjv ,

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

Introduit dans commit 913e5cb , uniquement pour Docker 1.13+.

docker container prune

Merci pour le partage - pour que cela devienne visible, je vous cite dans la réponse en haut du fil
qkrijger

Comme d'habitude, ajoutez l' -findicateur pour forcer le nettoyage sans poser de questions.
Dirk

3
devrait être marqué comme la réponse correcte de nos jours, la plupart des réponses ci-dessus remontent dans le temps, mais sont aujourd'hui trop compliquées
Eugen Mayer

D'accord, tellement plus facile ces derniers temps, allez-y!
Maxim Geerinck

La description dans le bloc de code est pour docker system prune -a, ce qui supprime les images inutilisées. docker system prunesupprime uniquement les images pendantes ou les images sans balise.
smilebomb

104

Il est désormais possible d'utiliser le filtrage avec docker ps:

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

Et pour les images :

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

Cependant, l'un de ces éléments entraînera docker rmou docker rmigé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 ~/.bashrcou ~/.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
}

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 psfiltrage.


2
Notez le véritable avantage de cela - vous ne tuez pas accidentellement les storageconatiners.
Sobrique

3
Vous pouvez également utiliser status=createdpour obtenir ceux qui ne sont pas en cours d'exécution et qui ne l'ont jamais été.
enderland

96

MISE À JOUR 2019 (PLUS RÉCENT)

docker container prune

Cette - 2017 (OLD) façon

Pour supprimer TOUS LES CONTENANTS ARRÊTÉS

docker rm $(docker ps -a -q)

Pour supprimer TOUS LES CONTENANTS (ARRÊTÉS ET NON ARRÊTÉS)

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

3
sous-estimé, car ce n'est certainement pas la façon dont vous le faites en 2017 - ce serait le cas docker volume/container/image prune, voir stackoverflow.com/a/39860665/3625317
Eugen Mayer

6
a voté pour contrer le downvote parce que a) cette réponse était de 2016, et b) beaucoup de gens ne courent pas le bord saignant.
vif

49

Retirez tous les conteneurs arrêtés:

docker rm $(docker ps -a | grep Exited | awk '{print $1}')

D'après le commentaire de pauk960 :

Depuis la version 1.3.0, vous pouvez utiliser des filtres avec docker ps, au lieu d' grep Exitedutiliser docker ps -a -f status=exited. Et si vous l'utilisez -q, vous pouvez uniquement obtenir des ID de conteneur au lieu d'une sortie complète, pas besoin d'utiliser awk pour cela.


33

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 avec docker 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

docker rm $(docker ps --before 9c49c11c8d21 -q)

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 rm $(docker ps --since a6ca4661ec7f -q)

Docker stocke les conteneurs /var/lib/docker/containersdans Ubuntu. Je pense que les conteneurs supplémentaires ne font pas d'autre mal, mais prennent de l'espace disque.


32

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:

docker system prune

Si vous voulez vous assurer que vous supprimez uniquement les conteneurs qui ont un exitedstatut, utilisez ceci:

docker ps -aq -f status=exited | xargs docker rm

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:

docker images -q --no-trunc -f dangling=true | xargs docker rmi

22

Voici mon docker-cleanupscript, qui supprime les conteneurs et les images non balisés. Veuillez vérifier la source pour toute mise à jour.

#!/bin/sh
# Cleanup docker files: untagged containers and images.
#
# Use `docker-cleanup -n` for a dry run to see what would be deleted.

untagged_containers() {
  # Print containers using untagged images: $1 is used with awk's print: 0=line, 1=column 1.
  docker ps -a | awk '$2 ~ "[0-9a-f]{12}" {print $'$1'}'
}

untagged_images() {
  # Print untagged images: $1 is used with awk's print: 0=line, 3=column 3.
  # NOTE: intermediate images (via -a) seem to only cause
  # "Error: Conflict, foobarid wasn't deleted" messages.
  # Might be useful sometimes when Docker messed things up?!
  # docker images -a | awk '$1 == "<none>" {print $'$1'}'
  docker images | tail -n +2 | awk '$1 == "<none>" {print $'$1'}'
}

# Dry-run.
if [ "$1" = "-n" ]; then
  echo "=== Containers with uncommitted images: ==="
  untagged_containers 0
  echo

  echo "=== Uncommitted images: ==="
  untagged_images 0

  exit
fi

# Remove containers with untagged images.
echo "Removing containers:" >&2
untagged_containers 1 | xargs --no-run-if-empty docker rm --volumes=true

# Remove untagged images
echo "Removing images:" >&2
untagged_images 3 | xargs --no-run-if-empty docker rmi

Source: https://github.com/blueyed/dotfiles/blob/master/usr/bin/docker-cleanup


@BradMurray Merci! Vous aimerez aussi: github.com/blueyed/dotfiles/commit/…
blueyed

3
Ne fonctionne pas sur OSX en raison de l' xargs --no-run-if-emptyoption
caktux

13

Tout d'abord, arrêtez d'exécuter les conteneurs avant d'essayer de les supprimer

Supprimer les conteneurs en cours d'exécution

docker rm $(docker stop -t=1 $(docker ps -q))

Vous pouvez utiliser à la killplace de stop. Dans mon cas, je préfère stopcar 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:

Erreur: impossible de supprimer un conteneur en cours d'exécution, veuillez d'abord l'arrêter

Retirez tous les conteneurs

docker rm $(docker ps -a -q)

11

Suppression de tous les conteneurs du shell Windows:

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

Je vais inclure cela dans ma réponse puisque c'est la première page. Merci
qkrijger

"à partir du shell Windows" ? Vous pensez "utiliser le shell Windows (CMD)" ?
Peter Mortensen

10

https://github.com/HardySimpson/docker-cleanup

Nettoyage de Docker

Une toute petite coque tout-en-un, qui supprime:

  • Conteneurs qui ne fonctionnaient pas il y a plus d'un jour
  • Images n'appartenant à aucun conteneur restant

Intention de s'exécuter en tant que tâche crontab

Fonctionnalité

  • Il supprimera toutes les <none>:<none>images
  • Si l'image contient plusieurs références repo: tag, elle supprimera toutes les repo: tag sauf lors de l'exécution d'un conteneur. En fait, c'est une nature de "docker rmi".
  • Beaucoup message d'erreur sera affichée sur l' écran, et vous pouvez décider de 2>/dev/nullou non
  • Apprenez quelque chose de docker-gc et corrigez son problème (il ne peut pas supprimer l'image qui a plusieurs repo: tag)

9

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 tagtoujours la dernière image Docker avec «dernier». Cela signifie que sans rien nettoyer, mes images Docker ressemblent à:

REPOSITORY              TAG       IMAGE ID        CREATED         VIRTUAL SIZE
some_repo/some_image    0.0.5     8f1a7c7ba93c    23 hours ago    925.4 MB
some_repo/some_image    latest    8f1a7c7ba93c    23 hours ago    925.4 MB
some_repo/some_image    0.0.4     0beabfa514ea    45 hours ago    925.4 MB
some_repo/some_image    0.0.3     54302cd10bf2    6 days ago      978.5 MB
some_repo/some_image    0.0.2     0078b30f3d9a    7 days ago      978.5 MB
some_repo/some_image    0.0.1     sdfgdf0f3d9a    8 days ago      938.5 MB

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 tailest votre meilleur ami ici. Depuis docker imageset les docker psdeux par date, nous pouvons simplement utiliser tailpour sélectionner tous les trois sauf les trois et les supprimer:

docker rmi $(docker images -q | tail -n +4)

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:

docker rm $(docker ps -aq | tail -n +4)

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 grepet awket être sur mon chemin:

docker rmi $(docker images -a | grep 'some_repo/some_image' | awk '{print $3}' | tail -n +4)

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.


8

Utilisation:

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

Il arrête et supprime de force tous les conteneurs présents localement.


Veuillez modifier avec plus d'informations. Les réponses codées uniquement et "essayez ceci" sont déconseillées, car elles ne contiennent aucun contenu consultable et n'expliquent pas pourquoi quelqu'un devrait "essayer ceci". Nous nous efforçons ici d'être une ressource de connaissances.
Brian Tompsett - 汤 莱恩

Dans Ubuntu 16.04, Docker nécessite sudo, vous devez donc écrire sudo docker rm -f $(sudo docker ps -a -q).
Elliott

en plus, cela fonctionne également sous Windows sous PowerShell!
Robert Ivanc

@Elliott Je pense que sudoc'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.
emory

7

Retirez les 5 conteneurs les plus anciens:

docker rm `docker ps -aq | tail -n 5`

Voyez combien de conteneurs il reste:

docker ps -aq | wc -l

Beau travail @Pithikos. J'ai ajouté la réponse qui supprime tous les anciens conteneurs.
Mostafa Ghadimi

7

Retirez tous les conteneurs arrêtés.

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

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.

sudo docker rmi $ (images du sudo docker -q --filter "dangling = true")


N'oubliez pas de supprimer les volumes docker en spécifiant l'option -v (sudo docker rm -v $ (sudo docker ps -a -q))
vcarel

N'a pas recherché cela, mais je suppose que la même chose que:docker ps -aq | xargs docker rm -v
quine

Cela ne fonctionne que sur Linux, pas sur Windows ... Mais docker rm -f $(docker ps -a -q)fonctionne dans PowerShell / Docker pour Windows.
Peter Mortensen

6

Nouvelle façon: Spotify / Docker-GC joue le jeu.

 docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v /etc:/etc spotify/docker-gc
  • 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

Il a pris en charge les paramètres environnementaux

Forcer la suppression d'images comportant plusieurs balises

 FORCE_IMAGE_REMOVAL=1

Forcer la suppression des conteneurs

 FORCE_CONTAINER_REMOVAL=1 

Exclusion des conteneurs et des images récemment fermés de la récupération de place

 GRACE_PERIOD_SECONDS=86400

Ce paramètre empêche également la suppression des images créées il y a moins de GRACE_PERIOD_SECONDS secondes.

Marche à sec

 DRY_RUN=1

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

 docker ps -a -q -f status=exited | xargs --no-run-if-empty docker rm
             OR 
 docker rm $(docker ps -a -q)

supprimer toutes les images associées aux conteneurs Docker non exécutés

 docker images -q | xargs --no-run-if-empty docker rmi

nettoyer les volumes Docker orphelins pour Docker version 1.10.x et supérieure

 docker volume ls -qf dangling=true | xargs -r docker volume rm

Basé sur une période de temps

 docker ps -a | grep "weeks ago" | awk "{print $1}" | xargs --no-run-if-empty docker rm
 docker ps -a | grep "days ago" | awk "{print $1}" | xargs --no-run-if-empty docker rm
 docker ps -a | grep "hours ago" | awk "{print $1}" | xargs --no-run-if-empty docker rm

1
Alternative intéressante. +1
VonC

6
  1. Supprimez tous les processus de docker:

    docker rm $(docker ps -a -q)
    
  2. Supprimer un conteneur spécifique:

    $ docker ps -a (lists all old containers)
    
    $ docker rm container-Id
    


4
#!/bin/bash
# docker-gc --- Remove stopped docker containers

RUNNING=$(docker ps -q)
ALL=$(docker ps -a -q)

for container in $ALL ; do
    [[ "$RUNNING" =~ "$container" ]] && continue
    echo Removing container: $(docker rm $container)
done

pour ceux qui ne veulent pas le rechercher eux-mêmes github.com/spotify/docker-gc
sinistre

C'est parfait. J'ai également écrit une réponse qui a la même fonctionnalité.
Mostafa Ghadimi

3

J'utilise toujours docker rmi $(docker ps -a -q) pour supprimer toutes les images.

Vous pouvez supprimer le répertoire en /var/lib/docker/graphcas d' docker rmiéchec.


Merci d'avoir ajouté les informations / var / lib / docker / graph
Jonathan DeMarks

La question était de savoir comment supprimer les conteneurs, pas les images.
pauk960

3

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)


3

Essayez cette commande pour nettoyer les conteneurs et les images pendantes.

docker system prune -f

Ceci est un pro-tip incroyable!
b01

3

Les étapes de base pour arrêter / supprimer tous les conteneurs et images

  1. Liste de tous les conteneurs

    docker ps -aq

  2. Arrêtez tous les conteneurs en cours d'exécution

    docker stop $(docker ps -aq)

  3. Retirez tous les conteneurs

    docker rm $(docker ps -aq)

  4. 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.


2

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)

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

Si vous retirez les conteneurs de toute façon, alors docker rm -f $(docker ps --no-trunc -aq)c'est plus rapide
qkrijger

Certes, mais si vous en avez besoin pour effectuer un arrêt approprié pour nettoyer les ressources partagées ou réutilisées (par exemple, volumes attachés, connexions actives correctement fermées, etc.), vous devez d'abord appeler stop. Excellent exemple, si vous avez un conteneur Jenkins, alors tuer le conteneur est une mauvaise idée. Vous voulez qu'il enregistre toutes les modifications non persistantes, avertisse les utilisateurs connectés et, très important, arrête correctement toutes les versions.
Kraig McConaghy

convenu, c'est un cas d'utilisation très valide
qkrijger

2
#!/bin/bash

echo Cleanup unused containers
unused_containers=$(docker ps -a -q --filter="status=exited")
if [[ -n $unused_containers ]]
then
  docker rm $unused_containers
fi

echo Cleanup unused images
unused_images=$(docker images | grep '^<none>' | awk '{print $3}')
if [[ -n $unused_images ]]
then
  docker rmi $unused_images
fi

5
Lorsque vous répondez, il est préférable d'avoir des explications sur ce que fait la solution plutôt qu'un simple vidage de code, sinon la réponse pourrait être supprimée.
AlBlue


2

J'utilise:

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

pour supprimer les conteneurs sortis et:

docker rmi -f $(docker images | grep "<none>" | awk "{print \$3}")

afin de se débarrasser de toutes les images non marquées.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.