Comment supprimer une image dans Docker?

841

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' rmiaide, la syntaxe appropriée est docker rmi IMAGE [IMAGE...], et je ne sais pas quoi faire de cela.

Comment 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 cours docker ps, aucun conteneur n'apparaît. Running docker imagesmontre quatre (4) baseimages et une (1) nodeimage.

Jules
la source
1
Quelle version de docker utilisez-vous? Pouvez-vous coller la sortie de «version docker» et «info docker»? J'ai juste essayé avec le maître et ça a bien fonctionné.
creack
J'ai mis à jour la question avec cette information.
Jules
1
docker infoaffiche la quantité réelle d'images, vous pouvez essayer que ./docker images -a -q | sort | uniq | wc -lce soit le même résultat (-a pour toutes les images, -q pour les identifiants uniquement). docker psaffiche uniquement les conteneurs actifs, vous pouvez faire docker ps -apour répertorier tous les conteneurs
creack
Pouvez-vous essayer de démarrer le démon docker avec l' -Doption et le client également? docker -d -D& ; docker -D rmi <id>. Pouvez-vous également essayer CID=$(docker run -d ubuntu bash); ID=$(docker commit $CID); docker rmi $ID?
creack
4
Jetez un oeil à cette demande de traction: github.com/dotcloud/docker/pull/1225
creack

Réponses:

1014

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)

Nick Stinemates
la source
13
Si certains de vos conteneurs sont toujours en cours d'exécution, vous pouvez exécuter: docker stop $ (docker ps -qa) pour arrêter tous les conteneurs. Je pense que la suppression d'un conteneur en cours d'exécution pourrait ne pas fonctionner, au moins je me souviens que j'avais des problèmes avec cela. Je me trompe peut-être ... J'ai vérifié la page de manuel et elle supporte mon hypothèse: "-f, --force = true | false Force la suppression du conteneur en cours d'exécution. La valeur par défaut est false."
Konrad Kleine
1
Ah, je ne connaissais pas la commande pour "supprimer tous les conteneurs existants". Avait écrit propre: docker ps -a | sed -r 's / ^ (\ w +). * / \ 1 / g' | sed -r 's / ^ CONTAINER //' | sed -r 's / ^ (\ w +) / docker rm \ 1 / g' | awk 'system ($ 0)' Merci!
Anurag
4
Vous savez que les options de ligne de commande sont mal conçues lorsque vous devez utiliser des fonctionnalités spécifiques au shell pour obtenir des fonctionnalités de base.
user3467349
Pour supprimer toutes les images existantes, vous pouvez utiliser - "docker rmi $ (docker images -q)"
humain
Pour supprimer tous les conteneurs existants à l'aide de Windows PowerShell: docker ps -aq | Foreach-Object { docker stop $_; docker rm $_; }
fartwhif
565

Voici quelques façons de supprimer des images / conteneurs Docker:

Supprimer une seule image

docker rmi image_name:version/image-id

Supprimer toutes les images

docker rmi $(docker images -qf "dangling=true")

Tuez les conteneurs et retirez-les:

docker rm $(docker kill $(docker ps -aq))

Remarque: remplacez killpar stoppour un arrêt progressif

Supprimer toutes les images sauf "mon-image"

Utilisez grep pour supprimer tout sauf my-imageetubuntu

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))

Ulises
la source
25
Ajout: supprimer les images "pendantes" (images sans balises):docker rmi $(docker images -qf "dangling=true")
kolypto
5
devrait êtredocker rm $(docker kill $(docker ps -a -q))
BMW
1
"Supprimer tout sauf" sans awk:docker rmi $(docker images --quiet | grep -v $(docker images --quiet ubuntu:my-image))
phobie
1
@kolypto Le "dangling = true" semble cependant ne pas supprimer les conteneurs non balancés. Exécutez à nouveau, moins l'indicateur -f et pendant pour supprimer le reste.
DougW
1
Est-ce juste moi ou cette dernière suggestion (ou (sans awk)) ne fonctionne-t-elle pas vraiment?
Mike Wise
196

Supprimer tous les conteneurs Docker

docker rm $(docker ps -a -q)

Supprimer toutes les images de docker

docker rmi $(docker images -q)
Chrysalide
la source
7
Supprimer les images non marquées:docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
Barrett Clark
1
eq8.eu/blogs/23-spring-cleaning-for-webdevelopers sudo docker rmi -f $(sudo docker images | grep "<none>" | awk "{print \$3}") , puis supprimer les balises de sortie en direct de 2015 (par exemple live-20150121223), nous pouvons le faire sudo docker rmi -f $(sudo docker images | grep live-2015 | awk "{print \$3}")
équivalent8
Pour le forcer, vous devez écrire: docker -f rm $ (docker ps -a -q)
Adrian Lopez
71

Pour supprimer une image de Docker à l'aide de l'ID d'image:

  1. Obtenez la liste de toutes les images

    docker images
    
  2. Identifiez l'ID d'image 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`
    
  3. Enfin, supprimez l'image à l'aide de l'ID de l'image (seuls les trois premiers chiffres sont requis)

    docker rmi 08d
    
kweku360
la source
1
Il faut d'abord arrêter le conteneur et le retirer, voir stackoverflow.com/questions/21398087/…
vikramvi
37

Image:

  1. Liste des images

    images de docker

  2. Supprimer une image

    docker rmi image_name

  3. Forcer la suppression d'une image

    docker rmi -f nom_image

Récipient:

  1. Lister tous les conteneurs

    docker ps -a

  2. Retirez un conteneur

    docker rm container_id

  3. Forcer le retrait d'un conteneur

    docker rm -f container_id

code hackfox
la source
29

Mise à jour, comme commenté par VonC dans Comment supprimer les anciens conteneurs Docker .

Avec Docker 1.13 (Q4 2016), vous avez désormais:

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
qkrijger
la source
Merci pour la réponse complète, mais cela ne répond pas directement à la question d'origine (qui a déjà été répondue et dont la première réponse est toujours pertinente).
Jules
2
Je suis d'accord. Cependant, étant donné que le titre de cette question est très générique, cela est devenu une sorte de question de référence, j'ai donc pensé que la mise à jour du mécanisme était en place.
qkrijger
24

Suppression de conteneurs

  1. 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
      
  2. Supprimer les conteneurs sortis

    docker ps -a -f status=exited
    
  3. Retirez tous les conteneurs

    docker ps -q -a | xargs docker rm
    


Suppression d'images

docker rmi IMAGE_ID
  1. Supprimer des images spécifiques

    • pour une seule image

      docker rmi ubuntu
      
    • pour plusieurs images

      docker rmi ubuntu alpine
      
  2. Supprimer les images pendantes Les images pendantes
    sont des calques qui n'ont aucune relation avec les images balisées, car les images Docker sont constituées de plusieurs images.

    docker rmi -f $(docker images -f dangling=true -q)
    
  3. Supprimer toutes les images Docker

    docker rmi -f $(docker images -a -q)
    

Suppression de volumes

Pour répertorier les volumes, exécutez docker volume ls

  1. Supprimer un volume spécifique

    docker volume rm VOLUME_NAME
    
  2. Supprimer les volumes pendants

    docker volume rm $(docker volume ls -f dangling=true -q)
    
  3. Supprimer un conteneur et ses volumes

    docker rm -v CONTAINER_NAME
    
Tout est possible
la source
Pourquoi doubler CONTAINER_ID?
Peter Mortensen
19

docker rm container_name

docker rmi image_name

docker help

rm Retirer un ou plusieurs conteneurs

rmi Supprimer une ou plusieurs images

KunMing Xie
la source
Merci, mais cette question a déjà plusieurs réponses, et une réponse sélectionnée, qui a résolu le problème il y a presque 3 ans.
Jules
13
docker rmi  91c95931e552

Réponse d'erreur du démon: conflit, impossible de supprimer 91c95931e552 car le conteneur 76068d66b290 l'utilise, utilisez -f pour forcer FATA [0000] Erreur: impossible de supprimer une ou plusieurs images

Trouver l'ID du conteneur,

# docker ps -a

# docker rm  daf644660736 
lakshmikandan
la source
Est-ce une réponse à la question?
Peter Mortensen
Pourquoi daf644660736? Comment est-ce lié à l'un des précédents?
Peter Mortensen
5

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 marche
  • docker rm container-id - Pour supprimer / supprimer le conteneur

puis,

  • docker rmi image-id - Pour supprimer / supprimer l'image
Murali Manchadikkal
la source
3

Pour les versions 1.13 et supérieures:

docker image rm [OPTIONS] IMAGE [IMAGE...]

Comparant:

les [OPTIONS]semblent ne pas avoir de différence.

--force , -f        Force removal of the image
--no-prune          Do not delete untagged parents

De: Présentation de Docker 1.13

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, listet startde conteneurs sont maintenant des sous-commandes de docker containeret historyest une sous-commande de docker image.

Ces modifications nous permettent de nettoyer la syntaxe Docker CLI, d'améliorer le texte d'aide et de rendre Docker plus simple à utiliser. L'ancienne syntaxe de commande est toujours prise en charge, mais nous encourageons tout le monde à adopter la nouvelle syntaxe .

tgogos
la source
3

Docker fournit une commande à 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)

En outre, vous pouvez également utiliser des filterparamètres pour supprimer un ensemble d'images à la 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 ce filtre d'images comme ceci:

docker rmi $(docker images --filter "since=<hello-world>")
docker rmi $(docker images --filter "before=<hello-world>")
Mr Singh
la source
1

Supprimez-les 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 en utilisant la 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 obtenez une erreur disant qu'il ne peut pas être supprimé en raison des dépendances de l'enfant

chandank
la source
1

Si vous souhaitez nettoyer automatiquement / périodiquement les conteneurs sortis 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 sur chaque serveur pour nettoyer (ce serait pénible).

Exécutez simplement:

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 aussi longtemps que vous le définissez à l'aide de l'option DELAY_TIME = 1800) et nettoiera les conteneurs et les images sortants.

Plus de détails: https://github.com/meltwater/docker-cleanup/blob/master/README.md

Innocent Anigbo
la source
1

Voici un script shell pour supprimer une image balisée (nommée) et ses conteneurs. Enregistrer en tant que docker-rmi et exécuter en utilisant «docker-rmi my-image-name»

#!/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
Alex M
la source
vous devez xargs -rle faire fonctionner dans le boîtier sans correspondance.
comme.
0

Pourquoi personne n'a mentionné docker-compose! Je ne l'utilise que depuis une semaine et je ne peux pas survivre sans. Tout ce dont vous avez besoin est d'écrire un yml qui ne prend que quelques minutes d'étude, puis vous êtes prêt à partir. Il peut démarrer des images, des conteneurs (qui sont nécessaires dans les soi-disant services) et vous permet de consulter les journaux comme vous l'utilisez avec les commandes natives de docker. Essayez-le:

docker-compose up -d
docker-compose down --rmi 'local'

Avant d'utiliser Docker-compose, j'ai écrit mon propre script shell, puis j'ai dû personnaliser le script à tout moment, en particulier lorsque l'architecture de l'application a changé. Maintenant, je n'ai plus besoin de le faire, grâce à docker-compose.

Tiina
la source
docker-composeest un outil d'orchestration et souvent peu pratique pour une utilisation dans des projets simples. Une dockersolution autonome (ne nécessitant pas l'utilisation de configurations souvent finnicky docker-compose.yml) est préférable dans le contexte de cette question. De plus, il existe déjà de très nombreuses bonnes réponses.
Jules
@Jules personne n'a mentionné docker-compose ne signifie pas que ce sont de mauvaises réponses, et ne signifie pas non plus qu'il s'agit d'une réponse impuissante. Les commandes natives de Docker ne sont pas mauvaises, mais fastidieuses et nécessitent beaucoup de saisie à chaque fois. "Un est bon et deux c'est trop".
Tiina
-1

Pour moi, les choses suivantes ont bien fonctionné:

> docker images
REPOSITORY   TAG           IMAGE ID          CREATED             SIZE
debian       jessie        86baf4e8cde9      3 weeks ago         123MB
ubuntu       yakkety       7d3f705d307c      3 weeks ago         107MB
alpine       3.5           074d602a59d7      7 weeks ago         3.99MB

Ensuite, allez-y et supprimez une image en exécutant certaines comme celles-ci:

> docker rmi debian:jessie
> docker rmi ubuntu:yakkety
> docker rmi alipine:3.5
Julisch
la source
-1

Liste des images:

ahanjura@ubuntu:~$ sudo docker images

ID DE L'IMAGE DE L'ÉTIQUETTE DE RÉFÉRENTIEL TAILLE CRÉÉE 88282f8eda00 il y a 19 secondes 308,5 Mo 13e5d3d682f4 il y a 19 heures 663 Mo busybox2 dernière 05fe66bb1144 il y a 20 heures 1,129 Mo ubuntu 16,04 00fd29ccc6f1 il y a 5 jours 110,5 Mo ubuntu 14.04 67759a80360c 770 jours busybox dernière 6ad733544a63 il y a 6 semaines 1,129 Mo ubuntu 16.10 7d3f705d307c il y a 5 mois 106,7 Mo

Supprimer des images:

ahanjura@ubuntu:~$ sudo docker rmi 88282f8eda00

Supprimé: SHA256: 88282f8eda0036f85b5652c44d158308c6f86895ef1345dfa788318e6ba31194 Deleted: SHA256: 4f211a991fb392cd794bc9ad8833149cd9400c5955958c4017b1e2dc415e25e9 Deleted: SHA256: 8cc6917ac7f0dcb74969ae7958fe80b4a4ea7b3223fc888dfe1aef42f43df6f8 Deleted: SHA256: b74a8932cff5e61c3fd2cc39de3c0989bdfd5c2e5f72b8f99f2807595f8ece43

ahanjura@ubuntu:~$ sudo docker rmi 13e5d3d682f4

Réponse d'erreur du démon: conflit: impossible de supprimer 13e5d3d682f4 (doit être forcé) - l'image est utilisée par le conteneur arrêté 5593e25eb638

Supprimer de force:

ahanjura@ubuntu:~$ sudo docker rmi -f 13e5d3d682f4

Supprimé: SHA256: 13e5d3d682f4de973780b35a3393c46eb314ef3db45d3ae83baf2dd9d702747e Deleted: SHA256: 3ad9381c7041c03768ccd855ec86caa6bc0244223f10b0465c4898bdb21dc378 Deleted: SHA256: 5ccb917bce7bc8d3748eccf677d7b60dd101ed3e7fd2aedebd521735276606af Deleted: SHA256: 18356d19b91f0abcc04496729c9a4c49e695dbfe3f0bb1c595f30a7d4d264ebf

user1833058
la source
-1

Dans mon cas, le problème est que j'ai des images de remorquage avec le même nom, la solution consiste à ajouter la balise après le nom ou l'identifiant

sudo docker rmi <NAME>:<TAG>

ex:

sudo docker rmi php:7.0.4-fpm
Amirouche Zeggagh
la source