[LINUX] Supprimer les conteneurs inutiles de Docker à la fois

Récemment, j'ai étudié diverses choses en mettant Docker sur EC2 (Amazon Linux2) d'AWS ~~ jouant ~~. Créer un conteneur centos → Continuer → Terminer, créer un conteneur mysql → Continuer → Terminer, etc., et vérifier occasionnellement l'état de fonctionnement du conteneur avec la commande docker ps, mais à un moment donné docker Quand j'ai couru ps -a ** Que diable! !! **est devenu. Ensuite, "Ne détestez pas Docker même si le conteneur Docker est terminé!" ◯ Je ne sais pas si M. Atsuko Ta a dit, mais au moins j'ai appris que ** le conteneur Docker est terminé mais le conteneur Docker reste **.

L'introduction inutile est devenue longue, mais pour supprimer le conteneur Garbage Docker accumulé dans ce pool Un mémorandum de commande.

Suppression de conteneurs inutiles à l'aide de awk

État avant suppression

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                    PORTS                    NAMES
9ec50bb2ac79        mysql               "docker-entrypoint.s…"   4 days ago          Up 2 days                 3306/tcp, 33060/tcp      MYSQL
20cabc9db638        centos              "/bin/bash"              4 days ago          Up 2 days                 0.0.0.0:9989->8080/tcp   centos_container
149e47fc7182        mysql               "docker-entrypoint.s…"   4 days ago          Exited (0) 4 days ago                              silly_haibt
6d0b42666db1        mysql               "docker-entrypoint.s…"   4 days ago          Exited (0) 4 days ago                              stoic_panini
cc75432e283b        mysql               "docker-entrypoint.s…"   4 days ago          Exited (127) 4 days ago                            serene_merkle
e75ea014088a        mysql               "docker-entrypoint.s…"   4 days ago          Exited (0) 4 days ago                              laughing_allen
7f6d0144717d        centos              "/bin/bash"              4 days ago          Exited (0) 4 days ago                              zealous_haibt
b78d2f0c9b93        centos              "/bin/bash"              4 days ago          Exited (0) 4 days ago                              centos_1
a1adb31a4719        mysql               "docker-entrypoint.s…"   4 days ago          Exited (0) 4 days ago                              mysql_container
b977c75c9dd7        mysql               "docker-entrypoint.s…"   4 days ago          Exited (1) 4 days ago                              bold_nobel
6c590752cab8        mysql               "docker-entrypoint.s…"   4 days ago          Exited (1) 4 days ago                              gifted_nightingale

Parmi les éléments ci-dessus, supprimez tous sauf les deux premiers en fonctionnement.

docker ps -f status=exited | awk '{print $1}' | xargs docker rm

Résultat d'exécution

149e47fc7182
6d0b42666db1
cc75432e283b
e75ea014088a
7f6d0144717d
b78d2f0c9b93
a1adb31a4719
b977c75c9dd7
6c590752cab8
Error: No such container: CONTAINER
[ ~]$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
9ec50bb2ac79        mysql               "docker-entrypoint.s…"   4 days ago          Up 2 days           3306/tcp, 33060/tcp      MYSQL
20cabc9db638        centos              "/bin/bash"              4 days ago          Up 2 days           0.0.0.0:9989->8080/tcp   centos_container

Le conteneur inutile a disparu, mais j'ai eu une erreur lorsque j'ai essayé de faire docker rm avec" CONTAINER "dans la ligne d'en-tête. .. (Eh bien, Ikka)

Méthode du document officiel Docker (-_-) * Nous recommandons ceci!

Après avoir créé la commande ci-dessus, le Manuel officiel de Docker montre comment supprimer un conteneur qui n'est pas en cours d'exécution. .. On vous demandera peut-être de le mettre avant la méthode awk qui n'a pas ce qui précède ...

État de pré-exécution (j'ai à nouveau augmenté la production de conteneurs inutiles)

docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                    NAMES
109839ada027        centos              "/bin/bash"              35 seconds ago      Exited (0) 34 seconds ago                            vibrant_bohr
cf2e8c41b2ee        centos              "/bin/bash"              36 seconds ago      Exited (0) 36 seconds ago                            brave_mestorf
fcfdaf35235d        centos              "/bin/bash"              37 seconds ago      Exited (0) 37 seconds ago                            gallant_faraday
bf7b9fa96291        centos              "/bin/bash"              38 seconds ago      Exited (0) 38 seconds ago                            zealous_morse
9ec50bb2ac79        mysql               "docker-entrypoint.s…"   4 days ago          Up 2 days                   3306/tcp, 33060/tcp      MYSQL
20cabc9db638        centos              "/bin/bash"              4 days ago          Up 2 days                   0.0.0.0:9989->8080/tcp   centos_container

Supprimer la commande

Explication de la commande (du manuel officiel)

Cette commande supprime tous les conteneurs arrêtés. La commande docker ps -a -q transmet tous les ID de conteneur terminés à la commande rm et les supprime tous. Le conteneur en cours d'exécution n'est pas supprimé.

docker rm $(docker ps -a -q)

Résultat d'exécution

109839ada027
cf2e8c41b2ee
fcfdaf35235d
bf7b9fa96291
Error response from daemon: You cannot remove a running container 9ec50bb2ac797f3cfdbe827aa2793ba135f6f29e9fd2c1b179afa09d6be4b5ba. Stop the container before attempting removal or force remove
Error response from daemon: You cannot remove a running container 20cabc9db6380304c3c0c3b8a14f04e0bd60fd58c810ee4c02d6539fd5b4f3f3. Stop the container before attempting removal or force remove

Une erreur se produit lors de la tentative de suppression d'un conteneur en cours d'exécution. Je ne l'ai pas essayé, mais si vous faites docker rm -f $ (docker ps -a -q), vous serez condamné à tuer tous les conteneurs! Cela devrait l'être, et comme la plupart d'entre vous qui avez lu jusqu'à présent l'ont remarqué, cela a été réalisé par la méthode awk ci-dessus. Le contenu peut également être réalisé avec la commande suivante ...

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

Eh bien, il semble que vous allez bien. .. .. Dix

Recommended Posts

Supprimer les conteneurs inutiles de Docker à la fois
Sortez de plusieurs boucles à la fois
Recevez de nombreux tweets Twitter à la fois
python chez docker