Comment résoudre l'erreur 'no such image' lors de la suppression d'images Docker

DockerBeginner
Pratiquer maintenant

Introduction

Docker est une plateforme de conteneurisation puissante qui a révolutionné la façon dont les développeurs construisent, déploient et gèrent les applications. Cependant, les utilisateurs rencontrent parfois l'erreur « no such image » (aucune image de ce type) lorsqu'ils tentent de supprimer des images Docker. Ce lab vous guidera à travers la compréhension des images Docker, la reproduction de l'erreur dans un environnement contrôlé et l'apprentissage de techniques pratiques pour la résoudre efficacement.

À la fin de ce lab, vous aurez une expérience pratique de la gestion des images Docker et serez capable de dépanner avec confiance les erreurs courantes liées aux images.

Comprendre les images Docker

Commençons par explorer les images Docker et les commandes courantes liées aux images. Les images Docker sont des modèles en lecture seule utilisés pour créer des conteneurs. Elles contiennent tous les composants nécessaires à l'exécution d'une application.

Vérification de l'installation de Docker

Tout d'abord, vérifions que Docker est correctement installé et en cours d'exécution sur votre système :

docker --version

Vous devriez voir une sortie similaire à :

Docker version 20.10.21, build baeda1f

Vérifions également que le démon Docker est en cours d'exécution :

docker info

Cette commande affichera des informations à l'échelle du système concernant votre installation Docker.

Extraction d'images Docker

Maintenant, extrayons quelques images Docker de Docker Hub pour travailler avec :

docker pull ubuntu:20.04

Cette commande télécharge l'image Ubuntu 20.04. Vous devriez voir une sortie de progression similaire à :

20.04: Pulling from library/ubuntu
ca1779a3256a: Pull complete
Digest: sha256:db8bf6f4fb351aa7a26e27ba2686cf8eb511a5c19b8c695210842adc8957aa27
Status: Downloaded newer image for ubuntu:20.04
docker.io/library/ubuntu:20.04

Extrayons une autre image :

docker pull alpine:latest

Lister les images Docker

Pour voir toutes les images que vous avez localement sur votre système, exécutez :

docker images

La sortie devrait ressembler à :

REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
alpine        latest    e66264b98777   2 weeks ago     5.53MB
ubuntu        20.04     f8fe765559e5   4 weeks ago     72.8MB

Inspection des détails de l'image

Vous pouvez voir des informations plus détaillées sur une image en utilisant la commande inspect :

docker inspect alpine:latest

Cela affichera un document JSON avec des informations détaillées sur l'image.

Maintenant que vous comprenez les bases des images Docker et que vous avez quelques images sur votre système, nous allons passer à la reproduction, puis à la résolution de l'erreur « no such image ».

Reproduction de l'erreur « no such image »

Dans cette étape, nous allons délibérément déclencher l'erreur « no such image » (aucune image de ce type) pour mieux la comprendre. Cette erreur se produit généralement lorsque vous essayez de supprimer une image qui n'existe pas ou qui a un nom/tag incorrect.

Création d'un scénario pour l'erreur

Essayons de supprimer une image qui n'existe pas sur votre système :

docker rmi nonexistent-image:v1.0

Vous devriez voir le message d'erreur suivant :

Error: No such image: nonexistent-image:v1.0

C'est l'erreur « no such image » sur laquelle nous nous concentrons dans ce lab.

Comprendre les différents scénarios

Il existe plusieurs scénarios courants qui conduisent à cette erreur :

  1. Essayer de supprimer une image qui n'existe pas
  2. Utiliser un nom ou un tag d'image incorrect
  3. Fautes de frappe dans l'ID ou le nom de l'image
  4. L'image a déjà été supprimée

Générons une autre instance de l'erreur en essayant de supprimer une image avec le mauvais tag :

docker rmi ubuntu:nonexistent-tag

Encore une fois, vous verrez une erreur similaire :

Error: No such image: ubuntu:nonexistent-tag

Identification des images dans Docker

Les images Docker peuvent être référencées de trois manières :

  1. Repository et tag (par exemple, ubuntu:20.04)
  2. ID d'image (par exemple, f8fe765559e5)
  3. Digest d'image (un hachage SHA256)

Examinons les ID d'image de nos images extraites :

docker images --no-trunc

Cela affichera les ID d'image complets au lieu des versions tronquées. Maintenant, essayons de supprimer une image en utilisant un ID d'image partiel, mais incorrect :

docker rmi abc123

Vous devriez voir la même erreur « no such image », car cet ID ne correspond à aucune image de votre système.

Comprendre comment Docker identifie les images est crucial pour résoudre l'erreur « no such image ». Dans l'étape suivante, nous apprendrons comment résoudre correctement cette erreur.

Résolution de l'erreur « no such image »

Maintenant que nous comprenons l'erreur, explorons des méthodes pratiques pour la résoudre. La clé pour corriger l'erreur « no such image » est de s'assurer que vous utilisez la référence d'image correcte.

Méthode 1 : Vérifier les images disponibles

La première étape pour résoudre l'erreur consiste à vérifier quelles images sont réellement disponibles sur votre système :

docker images

Cela affiche toutes les images présentes sur votre système. Assurez-vous que l'image que vous essayez de supprimer apparaît dans cette liste.

Méthode 2 : Utilisation des ID d'image

Si vous n'êtes pas sûr du nom et du tag exact d'une image, vous pouvez utiliser son ID d'image à la place. L'ID d'image est un identifiant unique pour chaque image dans votre environnement Docker.

Trouvons l'ID de l'image Ubuntu :

docker images --format "{{.ID}} {{.Repository}}:{{.Tag}}" | grep ubuntu

Cette commande liste les ID d'image avec leurs noms et tags, puis filtre pour les images Ubuntu. La sortie pourrait ressembler à :

f8fe765559e5 ubuntu:20.04

Vous pouvez maintenant supprimer l'image en utilisant son ID :

## Remplacez f8fe765559e5 par l'ID réel de votre système
docker rmi f8fe765559e5

Méthode 3 : Utiliser l'option force (avec prudence)

Dans certains cas, vous devrez peut-être forcer la suppression d'une image. Cela doit être utilisé avec précaution car cela pourrait entraîner des problèmes si l'image est toujours en cours d'utilisation.

docker rmi -f alpine:latest

L'option -f ou --force force la suppression. Vous devriez voir une sortie comme :

Untagged: alpine:latest
Untagged: alpine@sha256:1a6d376bf70c0941e5a1bcf34f4d0b5e2e7ed37e58c3c70eadf39f2c5f2146d7
Deleted: sha256:e66264b98777c5a0ece2decdca479c909c8c01571cd473ce6c1013773f190e6c

Méthode 4 : Nettoyer en utilisant prune

Si vous souhaitez supprimer toutes les images inutilisées (pas seulement une spécifique), vous pouvez utiliser la commande prune :

docker image prune

Cela supprime toutes les images flottantes (images sans tags et non utilisées par des conteneurs). Si vous souhaitez supprimer toutes les images inutilisées, et pas seulement celles qui flottent :

docker image prune -a

Soyez prudent avec cette commande car elle supprimera toutes les images non utilisées par des conteneurs.

Essayons de supprimer correctement notre image Ubuntu restante :

docker rmi ubuntu:20.04

En cas de succès, vous devriez voir :

Untagged: ubuntu:20.04
Untagged: ubuntu@sha256:db8bf6f4fb351aa7a26e27ba2686cf8eb511a5c19b8c695210842adc8957aa27
Deleted: sha256:f8fe765559e51d3c522e282a2ef234d968fc23030b2bce9d8487466b53974467

Maintenant que vous avez appris plusieurs méthodes pour résoudre l'erreur « no such image », vous pouvez gérer efficacement vos images Docker sans rencontrer ce problème courant.

Gestion des images utilisées par les conteneurs

Un autre scénario courant qui peut entraîner des problèmes de suppression d'image est lorsque l'image est en cours d'utilisation par un conteneur. Explorons comment gérer cette situation.

Création d'un conteneur à partir d'une image

Tout d'abord, extrayons une petite image et créons un conteneur à partir de celle-ci :

docker pull nginx:alpine

Maintenant, exécutons un conteneur en utilisant cette image :

docker run --name test-nginx -d nginx:alpine

L'option -d exécute le conteneur en mode détaché (en arrière-plan). Vous devriez voir un ID de conteneur dans la sortie.

Vérifier le conteneur en cours d'exécution

Vérifiez que le conteneur est en cours d'exécution :

docker ps

Vous devriez voir une sortie similaire à :

CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS     NAMES
a1b2c3d4e5f6   nginx:alpine   "/docker-entrypoint.…"   10 seconds ago   Up 9 seconds    80/tcp    test-nginx

Essayer de supprimer l'image

Maintenant, essayons de supprimer l'image qui est utilisée par notre conteneur en cours d'exécution :

docker rmi nginx:alpine

Vous obtiendrez un message d'erreur comme :

Error response from daemon: conflict: unable to remove repository reference "nginx:alpine" (must force) - container a1b2c3d4e5f6 is using its referenced image b46db85084b8

Cette erreur se produit car Docker vous empêche de supprimer des images qui sont en cours d'utilisation par des conteneurs.

Résolution des conflits d'images en cours d'utilisation

Pour résoudre ce problème, vous avez deux options :

Option 1 : Arrêter et supprimer d'abord le conteneur

## Arrêter le conteneur
docker stop test-nginx

## Supprimer le conteneur
docker rm test-nginx

## Maintenant, supprimez l'image
docker rmi nginx:alpine

Option 2 : Forcer la suppression de l'image (Non recommandé)

docker rmi -f nginx:alpine

L'utilisation de l'option force peut causer des problèmes avec les conteneurs en cours d'exécution, il est donc généralement préférable d'arrêter et de supprimer d'abord les conteneurs.

Un exemple de nettoyage complet

Effectuons un nettoyage complet de notre environnement de test :

## Lister tous les conteneurs (y compris ceux arrêtés)
docker ps -a

## Arrêter tous les conteneurs en cours d'exécution
docker stop $(docker ps -q)

## Supprimer tous les conteneurs
docker rm $(docker ps -a -q)

## Maintenant, supprimez en toute sécurité toutes les images
docker rmi $(docker images -q)

Après avoir exécuté ces commandes, votre environnement Docker devrait être propre. Vous pouvez vérifier avec :

docker images

Cela ne devrait afficher aucune image, ou afficher :

REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

En comprenant comment gérer les images qui sont en cours d'utilisation par les conteneurs, vous pouvez éviter et résoudre une autre cause courante de problèmes de gestion des images Docker.

Résumé

Dans ce lab, vous avez acquis une expérience pratique de la gestion des images Docker et appris à résoudre l'erreur courante « no such image ». Vous comprenez maintenant :

  • Comment travailler avec les images Docker, y compris les extraire (pull), les lister et les inspecter.
  • Différents scénarios qui peuvent déclencher l'erreur « no such image ».
  • Plusieurs méthodes pour résoudre l'erreur, notamment la vérification des images disponibles, l'utilisation des ID d'image et la suppression forcée lorsque nécessaire.
  • Comment gérer le cas particulier des images qui sont en cours d'utilisation par des conteneurs.

Ces compétences vous aideront à gérer votre environnement Docker plus efficacement et à résoudre les problèmes courants. Au fur et à mesure que vous continuerez à travailler avec Docker, rappelez-vous qu'une gestion appropriée des images est essentielle pour maintenir un flux de travail conteneurisé efficace.