J'exécute Docker sous Vagrant sous OS X 10.8.4 (Mountain Lion) et chaque fois que j'essaie de supprimer une image enregistrée, j'obtiens une erreur:
$ docker rmi some-image-id
2013/07/15 hh:mm:ss unexpected JSON input
Selon l'aide rmi
, la syntaxe appropriée est docker rmi IMAGE [IMAGE...]
, et je ne suis pas sûr de ce qu'il faut en penser.
Comment puis-je supprimer une image?
$ docker version
Client version: 0.4.8
Server version: 0.4.8
Go version: go1.1
$docker info
Containers: 1
Images: 3
Fait intéressant, lorsque je lance docker ps
, aucun conteneur ne s'affiche du tout. Lancer docker images
affiche quatre (4) images base
et une (1) image node
.
Essayez docker rmi node
. Cela devrait fonctionner.
Voir tous les conteneurs créés est aussi simple que docker ps -a
.
Pour supprimer tous les conteneurs existants (pas les images!), Exécutez docker rm $(docker ps -aq)
Voici quelques manières de supprimer les images/conteneurs de docker:
docker rmi image_name:version/image-id
docker rmi $(docker images -qf "dangling=true")
docker rm $(docker kill $(docker ps -aq))
Remarque: remplacez kill
par stop
pour un arrêt progressif
Utilisez grep pour supprimer tout sauf my-image
et ubuntu
docker rmi $(docker images | grep -v 'ubuntu\|my-image' | awk {'print $3'})
Ou (sans awk)
docker rmi $(docker images --quiet | grep -v $(docker images --quiet ubuntu:my-image))
docker rm $(docker ps -a -q)
docker rmi $(docker images -q)
Pour supprimer une image de Docker à l'aide de l'ID d'image:
Obtenir la liste de toutes les images
docker images
Identifiez l'ID de l'image que vous souhaitez supprimer, par exemple:
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
kweku360/Java latest 08d3a9b8e166 2 weeks ago 5.733 GB`
Enfin, supprimez l’image en utilisant l’ID d’image (seuls les trois premiers chiffres sont requis)
docker rmi 08d
images de menu fixe
docker rmi nom_image
docker rmi -f nom_image
docker ps -a
docker rm container_id
docker rm -f conteneur_id
Mise à jour, commentée par VonC dans Comment supprimer les anciens conteneurs Docker.
Avec Docker 1.13 (T4 2016), vous avez maintenant:
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
_
Pour supprimer un conteneur spécifique
docker rm CONTAINER_ID CONTAINER_ID
Pour une seule image
docker rm 70c0e19168cf
Pour plusieurs images
docker rm 70c0e19168cf c2ce80b62174
Supprimer les conteneurs sortis
docker ps -a -f status=exited
Retirez tous les conteneurs
docker ps -q -a | xargs docker rm
docker rmi IMAGE_ID
Supprimer des images spécifiques
pour une seule image
docker rmi ubuntu
pour plusieurs images
docker rmi ubuntu Alpine
Supprimer les images pendantes
Les images suspendues sont des calques sans relation avec les images marquées, car les images Docker sont constituées de plusieurs images.
docker rmi -f $(docker images -f dangling=true -q)
Supprimer toutes les images Docker
docker rmi -f $(docker images -a -q)
Pour lister les volumes, lancez docker volume ls
Supprimer un volume spécifique
docker volume rm VOLUME_NAME
Supprimer les volumes en suspens
docker volume rm $(docker volume ls -f dangling=true -q)
Supprimer un conteneur et ses volumes
docker rm -v CONTAINER_NAME
docker rm container_name
docker rmi image_name
_
docker help
_supprimer un ou plusieurs conteneurs
rmi Supprimer une ou plusieurs images
docker rmi 91c95931e552
Réponse d'erreur du démon: Conflict, impossible de supprimer 91c95931e552 car le conteneur 76068d66b290 l'utilise, utilisez -f pour forcer FATA [0000] Erreur: échec de la suppression d'une ou plusieurs images
Trouver l'identifiant du conteneur,
# docker ps -a
# docker rm daf644660736
Tout d'abord, nous devons arrêter et supprimer les conteneurs Docker qui sont attachés avec l'image Docker que nous allons supprimer.
Donc pour ça, d'abord
docker stop container-id
- Pour arrêter le conteneur en cours d'exécutiondocker rm container-id
- Pour supprimer/supprimer le conteneurensuite,
docker rmi image-id
- Pour supprimer/supprimer l'imagePour les versions 1.13 et supérieures:
docker image rm [OPTIONS] IMAGE [IMAGE...]
Comparant:
docker image rm
etdocker rmi
,les [OPTIONS]
semblent n'avoir aucune différence.
--force , -f Force removal of the image
--no-Prune Do not delete untagged parents
De: Présentation de Docker 1.1
CLI restructurée
Dans Docker 1.13, nous avons regroupé toutes les commandes pour les placer sous l’objet logique avec lequel elles interagissent. Par exemple,
list
etstart
des conteneurs sont maintenant des sous-commandes dedocker container
ethistory
est une sous-commande dedocker image
.Ces modifications nous ont permis de nettoyer la syntaxe Docker CLI, d'améliorer le texte d'aide et de simplifier l'utilisation de Docker. L'ancienne syntaxe de commande est toujours prise en charge, mais nous encourageons tout le monde à adopter la nouvelle syntaxe .
Docker fournit une commande pour supprimer images
.
Afficher/Supprimer
Images
:
docker images
docker images -a # All images
docker images --no-trunc # List the full length image IDs
docker images --filter "dangling=true" // Show unstage images
docker rmi $(docker images -f "dangling=true" -q) # Remove on unstages images
docker rmi <REPOSITORY> or <Image ID> # Remove a single image
docker image Prune # Interactively remove dangling images
docker image Prune -a # Remove all images
or
docker rmi -f $(Sudo docker images -a -q)
Vous pouvez également utiliser les paramètres
filter
pour supprimer un ensemble d’images en une fois:
Exemple:
$docker images --filter "before=<hello-world>" // It will all images before hello-world
$docker images --filter "since=<hello-world>" // It will all images since hello-world
Vous pouvez donc supprimer les images de filtre comme ceci:
docker rmi $(docker images --filter "since=<hello-world>")
docker rmi $(docker images --filter "before=<hello-world>")
Supprimer tous en utilisant
Étape 1: Tuez tous les conteneurs
for i in `Sudo docker ps -a | awk '{ print $1 }'`; do Sudo docker kill $i ; done
Étape 2: RM les premiers
for i in `Sudo docker ps -a | awk '{ print $1 }'`; do Sudo docker rm $i ; done
Étape 3: Supprimer les images avec force
for i in `Sudo docker images | awk '{ print $3}'`; do Sudo docker rmi --force $i ; done
Utilisez l'étape 1 au cas où vous auriez une erreur en disant qu'il ne peut pas être supprimé en raison de dépendances enfants.
Voici un script Shell pour supprimer une image étiquetée (nommée) et ses conteneurs. Enregistrez sous docker-rmi et exécutez-vous avec 'docker-rmi mon-image-nom'
#!/bin/bash
IMAGE=$1
if [ "$IMAGE" == "" ] ; then
echo "Missing image argument"
exit 2
fi
docker ps -qa -f "ancestor=$IMAGE" | xargs docker rm
docker rmi $IMAGE
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 ceci 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 (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: https://github.com/meltwater/docker-cleanup/blob/master/README.md