web-dev-qa-db-fra.com

Comment supprimer les vieux conteneurs Docker

Cette question est liée à Dois-je m'inquiéter des conteneurs Docker en excès qui ne fonctionnent pas?.

Je me demande comment enlever 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 toutes ou par nom d'image).

Peut-être existe-t-il un répertoire dans lequel ces conteneurs sont stockés et où je peux les supprimer facilement manuellement?

1133
qkrijger

Depuis Docker 1.13.x vous pouvez utiliser Docker conteneur Prune :

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 système Docker Prune :

docker system Prune

qui nettoiera tous les conteneurs, réseaux, images inutilisés (pendants et non référencés) et, éventuellement, les volumes, en une seule commande.


Pour les anciennes versions de Docker, vous pouvez chaî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 âgés de plusieurs semaines:

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

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

1309
Ken Cochrane

Une autre méthode, que j’ai eue de Guillaume J. Charmes (crédit à payer):

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

enlèvera tous les conteneurs de 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.-à-d., Dans l’ordre: conteneurs arrêtés, volumes sans conteneurs et images sans conteneurs).

Voir PR 26108 et commit 86de7c , qui introduisent quelques nouvelles commandes afin de faciliter la visualisation de l'espace occupé par les données du démon Docker sur le disque et de le nettoyer facilement " inutile "excès.

_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
_
620
qkrijger

Réponse mise à jour Utilisez docker system Prune ou docker container Prune maintenant. Voir réponse mise à jour de VonC .

Réponse précédente Si vous composez plusieurs astuces différentes ci-dessus, le moyen le plus élégant de supprimer tous les conteneurs inactifs semble être:

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

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

La manière officielle est:

docker rm `docker ps -aq`

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

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

250
Michael Neale

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

docker system Prune -a effacera TOUTES les données inutilisées (c.-à-d., Dans l'ordre: conteneurs arrêtés, volumes sans conteneurs et images avec pas de conteneurs).

_docker system Prune_ sans -a enlèvera (pour les images) uniquement les images pendantes, ou les images sans balise, comme commenté par smilebomb .

Voir PR 26108 et commit 86de7c , qui introduisent quelques nouvelles commandes afin de faciliter la visualisation de l'espace occupé par les données du démon Docker sur le disque et de le nettoyer facilement " inutile "excès.

_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 existe également _docker {container,image,volume,network} Prune_, qui peut être utilisé pour supprimer les instances inutilisées d'un seul type d'objet n.

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

_docker container Prune
_
126
VonC

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

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

Et pour images :

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

Cependant, aucun de ceux-ci ne provoquera l'erreur docker rm ou docker rmi en l'absence de conteneurs correspondants. L'ancienne astuce docker rm $(docker ps -aq) était encore pire, car elle tentait de supprimer tout conteneur en cours d'exécution, échouant à chacun d'entre eux.

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
}

Modifier: Comme indiqué ci-dessous, la réponse originale était de supprimer des images, pas des 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 filtrage ps.

103
caktux

MIS À JOUR2017 (NOUVEAU)

docker container Prune

Ceci - 2017 (ANCIEN) chemin

Pour enlever CONTENEURS TOUS ARRETEES

docker rm $(docker ps -a -q)

Pour enlever TOUS CONTENANTS(STOPPED AND NON STOPPED)

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

Retirez tous les conteneurs arrêtés:

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

D'après le commentaire de pauk96 :

Depuis la version 1.3.0 , vous pouvez utiliser les filtres avec docker ps, au lieu de grep Exited, utilisez docker ps -a -f status=exited. Et si vous utilisez -q avec ce dernier, vous ne pouvez obtenir que les ID de conteneur au lieu de la sortie complète. Inutile d'utiliser awk pour cela.

49
montells

Si vous n'aimez 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 Docker version 0.6.5.

Supposons que vous avez développé votre système et qu'il fonctionne maintenant, mais il reste un certain nombre de conteneurs. Vous souhaitez supprimer les conteneurs créés avant cette version opérationnelle. 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 est déjà en cours d'exécution sur un conteneur Docker. Vous avez développé votre application pour qu'elle s'exécute sur un autre conteneur et vous avez maintenant 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 dans /var/lib/docker/containers dans Ubuntu. Je pense que les conteneurs supplémentaires ne font pas de mal, mais prennent de la place sur le disque.

33
vesako

Mise à jour: À partir de la version 1.13 de Docker (sortie en janvier 2017), vous pouvez émettre la commande suivante pour nettoyer les conteneurs arrêtés, les volumes inutilisés, les images en suspens et les réseaux inutilisés:

docker system Prune

Si vous voulez vous assurer que vous ne supprimez que les conteneurs qui ont le statut exited, utilisez ceci:

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

De même, si vous nettoyez des éléments de menu fixe, vous pouvez supprimer les images non étiquetées et non nommées de cette manière:

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

Voici mon script docker-cleanup, qui supprime les conteneurs et les images non étiquetés. S'il vous plaît vérifier la source pour les mises à 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

22
blueyed

Tout d'abord, arrêtez les conteneurs en cours d'exécution avant de tenter de les supprimer

Retirer les conteneurs en cours d'exécution

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

Vous pouvez utiliser kill au lieu de stop. Dans mon cas, je préfère stop puisque j'ai tendance à les réexécuter plutôt qu'à en créer une nouvelle à chaque fois, alors j'essaie de les fermer correctement.

Note: Essayer d'arrêter un conteneur vous donnera une erreur:

Erreur: Impossible de supprimer un conteneur en cours, veuillez d'abord l'arrêter.

Retirer tous les conteneurs

docker rm $(docker ps -a -q)
13
Ulises

Supprimer tous les conteneurs de Windows Shell:

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

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

Nettoyage de docker

Un petit shell tout-en-un, qui supprime:

  • Conteneurs qui n'exécutent pas plus d'un jour
  • Images n'appartenant à aucun conteneur restant

Destiné à être exécuté comme un travail crontab

Fonctionnalité

  • Cela supprimera toutes les images <none>:<none>
  • Si l'image comporte plusieurs références repo: tag, elle supprimera tout repo: tag sauf lors de l'exécution d'un conteneur. En fait, il s’agit d’une nature de "docker rmi".
  • De nombreux messages d'erreur s'afficheront à l'écran et vous pourrez décider de 2>/dev/null ou non
  • Apprenez quelque chose à partir de docker-gc et résolvez son problème (il ne peut pas supprimer une image contenant plusieurs repo: tag)
9
HardySimpson

Utilisation:

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

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

8
Shashank G

Supprimer 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 transmettant leurs identifiants à docker rm. Cela ne devrait pas supprimer les conteneurs en cours d’exécution, et il vous indiquera qu’il ne peut pas supprimer une image en cours d’exécution.

Supprimer toutes les images non étiquetées

Maintenant, vous voulez nettoyer les anciennes images pour économiser de l'espace.

Sudo docker rmi $ (images de docker Sudo -q --filter "dangling = true")

7
Ric_Harvey

Donc, personnellement, je vous recommande de faire cela dans le cadre de votre script de déploiement pour les images et les conteneurs, en ne conservant que les n conteneurs et images les plus récents. Je balise mes images Docker avec le même schéma de contrôle de version que celui que j’utilise avec git tag, ainsi que de toujours marquer la dernière image Docker avec "latest". Cela signifie que sans rien nettoyer, mes images Docker se présentent comme suit:

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 tous mes récipients) reviennent à perpétuité sur toutes mes boîtes de production. Je veux juste que les 3 ou 4 derniers soient annulés et éliminés de tout le reste. Le tail d'Unix est votre meilleur ami ici. Puisque docker images et docker ps tous les deux par ordre, vous pouvez simplement utiliser tail pour sélectionner tous les éléments sauf les trois premiers et les supprimer:

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

Exécutez-le avec vos scripts de déploiement (ou localement) pour ne conserver que le nombre d'images suffisant pour pouvoir revenir facilement en arrière sans prendre trop de place ou encombrer de vieilles images.

Personnellement, je ne conserve à la fois qu'un seul conteneur sur mon carton de production, mais vous pouvez faire la même chose avec les conteneurs si vous en voulez plus:

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

Enfin, dans mon exemple simplifié, nous ne traitons qu’un dépôt à la fois, mais si vous en avez plus, vous pouvez obtenir un peu plus de sophistication avec la même idée. Dites que je veux juste garder les trois dernières images de some_repo/some_image. Je peux juste mélanger dans grep et awk et ê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 d’ici là et je vais donc arrêter de donner des exemples.

7
Eli

Nouvelle manière: spotify/docker-gc joue le tour.

 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 après leur suppression

Il a pris en charge les paramètres environnementaux

Forcer la suppression des images comportant plusieurs tags

 FORCE_IMAGE_REMOVAL=1

Forcer la suppression des conteneurs

 FORCE_CONTAINER_REMOVAL=1 

Exclusion des conteneurs récemment sortis et des images du nettoyage de la mémoire

 GRACE_PERIOD_SECONDS=86400

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

Essai à sec

 DRY_RUN=1

Nettoyage des volumes de conteneur orphelins CLEAN_UP_VOLUMES = 1

Référence: docker-gc

Ancienne façon de faire:

supprime les anciens conteneurs qui ne fonctionnent pas

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

supprime toutes les images associées à des conteneurs Docker non exécutés

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

nettoie les volumes de menu fixe orphelins pour les versions 1.10.x et supérieures du menu fixe

 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
6
f-society
  1. Supprimer tous les processus de menu fixe:

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

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

Éliminez les 5 conteneurs les plus anciens:

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

Voyez combien il reste de conteneurs:

docker ps -aq | wc -l
5
Pithikos

Vous pouvez utiliser la commande suivante pour supprimer les conteneurs fermés:

docker rm $(Sudo docker ps -a | grep Exit | cut -d ' ' -f 1)

Voici le Gist complet pour supprimer également les anciennes images sur le menu fixe: Gist pour supprimer les anciens conteneurs et images Docker .

4
urodoz
#!/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
3
mckoss

Vous ne pouvez supprimer que les conteneurs arrêtés. Arrêtez tous au début

docker stop $(docker ps -a -q)

Ensuite, vous pouvez supprimer

docker rm $(docker ps -a -q)

3
Marcin Szymczak

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

Vous pouvez supprimer le répertoire /var/lib/docker/graph lorsque docker rmi a échoué.

3
sunny

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

docker system Prune -f
3
Pal

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

  1. Lister tous les conteneurs

    docker ps -aq

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

    docker stop $(docker ps -aq)

  3. Retirer tous les conteneurs

    docker rm $(docker ps -aq)

  4. Supprimer toutes les images

    docker rmi $(docker images -q)

Note: Vous devez d'abord arrêter tous les conteneurs en cours avant de les supprimer. De même, avant de supprimer une image, vous devez arrêter et supprimer son ou ses conteneurs dépendants.

3

Utilisez les commandes imbriquées suivantes:

$ Sudo docker stop $(Sudo docker ps -a -q)

Cette commande arrête tous les conteneurs en cours d'exécution.

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

Cette commande supprime tous les conteneurs.

2
Rahul Bagad

Voici un script pour supprimer les conteneurs en cours d'exécution et les conteneurs créés créés depuis plus de 2 jours:

#!/bin/bash
# This script will kill and remove containers older than 2 days.
#
docker ps -aq > /scripts/containers.txt
today=`date +%Y-%m-%d`
oldate=`date --date="2 day ago" +%Y-%m-%d`
while read p; do
    cont=`docker inspect -f '{{ .Created }}' $p | cut -c 1-10`
    echo " Created date of $p is $cont"
    k=`echo $(( ( $(date -ud $today +'%s') - $(date -ud $cont +'%s'))/60/60/24 ))`
    echo $k
    if [ $k -ge 2 ];
    then
            echo "Killing docker container $p"
            docker kill $p
            echo "Removing docker container $p"
            docker rm $p
    else
            echo "Docker container $p is not one day old, so keeping the container."
    fi
done </scripts/containers.txt
2
SAB

Si vous souhaitez nettoyer automatiquement/périodiquement les conteneurs supprimés 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.

J'utilise cela en production car nous déployons plusieurs fois par jour sur plusieurs serveurs, et je ne veux pas aller nettoyer chaque serveur pour le nettoyer (ce serait un problème).

Il suffit de courir:

docker run -d -v /var/run/docker.sock:/var/run/docker.sock:rw  -v /var/lib/docker:/var/lib/docker:rw --restart=unless-stopped meltwater/docker-cleanup:latest

Il s'exécutera toutes les 30 minutes par défaut (ou quelle que soit la durée choisie à l'aide de l'option DELAY_TIME = 1800) et nettoiera les conteneurs et les images sortis.

Plus de détails: nettoyage de Docker

2
Innocent Anigbo

Pour enlever TOUS les conteneurs sans pleurer:

Sudo docker ps -a | grep -v CONTAINER | awk '{print $1}' | xargs --no-run-if-empty Sudo docker rm -f
2
Felipe
docker rm --force `docker ps -qa`
2
Sivalingam

Supprimez tous les conteneurs créés à partir d'une certaine image:

docker rm  $(docker ps -a | awk '/myimage:mytag/{print $1}')
2
estani

Sur Ubuntu 14.04 (Trusty Tahr):

$ for CON in `docker ps -qa`; do docker rm $CON ; done

Ceci est juste une commande Bash normale, elle devrait donc fonctionner avec TOUS les terminaux compatibles Bash.

2
sobi3ch

Pour ceux que cela intéresse, 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`
2
Kraig McConaghy
#!/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
1
AleX

Utilisez l'outil de gestion de docker Portainer

Nous pouvons gérer tous les anciens conteneurs, sans utiliser de volumes ni d'images, en utilisant cet outil

C'est une interface de gestion simple pour les dockers

COMMENT DÉPLOYER PORTAINER

Utilisez les commandes Docker suivantes pour déployer Portainer:

$ docker volume create portainer_data
$ docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

Vous aurez simplement besoin d'accéder au port 9000 du moteur Docker sur lequel portainer est exécuté à l'aide de votre navigateur.

Remarque: l'option -v /var/run/docker.sock:/var/run/docker.sock ne peut être utilisée que dans les environnements Linux.

1
Anish Varghese

J'ai trouvé que la commande ci-dessous est très pratique pour arrêter et supprimer tous les conteneurs. Vous n'avez pas besoin d'arrêter explicitement avec une autre commande si vous utilisez l'indicateur -f (force) car il arrête tous les conteneurs en cours d'exécution:

docker rm -f $(docker ps -a -q)
1
Pinaki Mukherjee

Il est très facile de supprimer les anciens conteneurs Docker.

Lister tous les conteneurs:

docker ps -a
docker ps (To list the running containers)

Une fois que vous avez appuyé sur docker ps -a, il vous donnera la liste des conteneurs ainsi que l'id du conteneur (unique et combinant a-z, A-Z et 0-9). Copiez l'identifiant du conteneur que vous voulez supprimer et cliquez simplement sur le dessous.

docker rm container_id

Votre conteneur sera supprimé avec les couches créées dans /var/lib/docker/aufs (si vous utilisez Ubuntu).

1
Harshal Vaidya

Pour supprimer un conteneur spécifié

docker container rm container_id

Si le conteneur est en cours d'exécution, vous devez l'arrêter avant de le supprimer.

docker container stop container_id

Et cette commande est de supprimer tous les conteneurs existants

docker container rm $(docker container -a -q)
1
NguyenHuuGiap

Ce processus comporte deux étapes (arrêter et supprimer):

  1. Arrêtez le conteneur utilisé par les microservices en cours d'exécution.

    docker stop $(docker ps -a -q)
    
  2. Retirez tous les conteneurs

    docker rm $(docker ps -a -q)
    
  3. Retirer un conteneur

    docker rm container-ID
    
1
Jitendra Bhalothia

Voici un one-liner qui enlève tous les conteneurs sortis.

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

Si vous voulez supprimer TOUTES les images, vous pouvez utiliser quelque chose comme ceci.

docker rmi $(docker images | sed -n '1!p' | awk '{print $3}')

1
nPcomp

Ces deux lignes de Bash filtreront les conteneurs en fonction de certains mots clés avant de les supprimer:

containers_to_keep=$(docker ps -a | grep 'keep\|Up\|registry:latest\|nexus' | awk '{ print $1 }')
containers_to_delete=$(docker ps -a | grep Exited | grep -Fv "$containers_to_keep" | awk '{ print $1 }')
docker rm $containers_to_delete

De ce post .

0
Emil Salageanu

Vous pouvez utiliser docker-helper à partir du référentiel https://github.com/kartoza/docker-helpers . Après l’installation, tapez simplement drmc.

0
etrimaille

D'après mon expérience, vous devriez arrêter les conteneurs avant de les supprimer pour éviter des erreurs de type "ce conteneur est toujours en cours d'exécution", ainsi:

Sudo /usr/bin/docker ps -aq |  awk '{print $1}' | \
xargs --no-run-if-empty bash -c 'Sudo docker stop $@; Sudo docker rm $@' bash

Je garde un alias dans mes fichiers de points comme:

alias wipedocker="Sudo /usr/bin/docker ps -aq |  awk '{print $1}' \
| xargs --no-run-if-empty bash -c 'Sudo docker stop $@; Sudo docker rm $@' bash"
0
CESCO

Pour supprimer simplement tout ce qui n'est pas actuellement utilisé par un conteneur en cours d'exécution, le alias, que je mets habituellement dans le .bash_profile sur mon Mac, aidera:

alias dockerclean="docker ps -q -a | xargs docker rm -v && docker images -q | xargs docker rmi"

Chaque fois que dockerclean est appelé à partir de la ligne de commande, les conteneurs arrêtés ainsi que les couches d'image inutilisées sont supprimés. Pour les conteneurs en cours d’exécution et les images utilisées, un message d’avertissement sera imprimé et ignoré.

0
h3nrik

Répertoriez tous les conteneurs (uniquement les ID)

docker ps -aq

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

docker stop $(docker ps -aq)

Retirer tous les conteneurs

docker rm $(docker ps -aq)

Supprimer toutes les images

docker rmi $(docker images -q)
0
Vikram Biwal

Pour une installation Linux, assurez-vous d'utiliser Sudo . En outre, il est bon de rechercher des images datant de plusieurs mois et semaines:

Sudo docker ps -a | grep 'weeks ago\|months ago' | \
    awk '{print $1}' | xargs --no-run-if-empty Sudo docker rm
0
Paul Oliver

J'utilise:

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

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 étiquetées.

0
Alexandru Bantiuc

J'utilise des variantes de ce qui suit:

docker ps -a | grep 'cassandra.*Exited' | cut -d " " -f 1

La première partie répertorie tous les processus.

La seconde sélectionne uniquement ceux qui ont 'cassandra' suivi de 'Exited'.

Le troisième, supprime tous les tests après l’ID d’image, vous obtenez ainsi une liste d’ID d’images.

Alors,

docker rm $(docker ps -a | grep 'cassandra.*Exited' | cut -d " " -f 1)
0
JRun

Ce court script pourrait aider (compilé à partir des réponses précédentes)!

#!/bin/bash

# Remove dangling images

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

if [ -n "$IMAGE_IDS" ]; then

    Sudo docker rmi $IMAGE_IDS > /dev/null 2>&1
    echo 'Images removed' $IMAGE_IDS
fi


# Remove exited containers

CONTAINER_IDS=$(Sudo docker ps -a -q -f status=exited)

if [ -n "$CONTAINER_IDS" ]; then

    Sudo docker rm -v $CONTAINER_IDS > /dev/null 2>&1
    echo 'Containers remove $CONTAINER_IDS'
fi
0
Chetan Sharma

docker rm -f $(docker ps -a -q) fera l'affaire. Il va arrêter les conteneurs et les supprimer aussi.

0
Jagatveer Singh

J'utilise les commandes suivantes pour supprimer les conteneurs Exited et Redémarrage docker

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

Utiliser la commande ci-dessous pour supprimer les images nommées none

docker image rm --force $(docker image ls  |grep none |awk '{print $3}')
0
Sijo M Cyril