J'ai essayé de construire une image Docker en utilisant un Dockerfile disponible localement.
docker build -t newimage .
J'ai également utilisé cette commande plusieurs fois plus tôt, mais en quelque sorte, cela ne fonctionne pas actuellement et je suis coincé à en trouver la raison.
Je serai vraiment utile si quelqu'un peut m'aider avec une solution possible ou un domaine possible pour rechercher un problème.
j'ai déjà jeté un coup d'œil sur d'autres articles qui auraient pu être liés par exemple: Docker build tag repository name
D'accord! J'ai découvert la raison du problème.
PROCESSUS DE CONSTRUCTION DE QUAI
Lorsque nous construisons une image docker, lors de la création d'une image, plusieurs autres images intermédiaires sont générées dans le processus. On ne les voit jamais dans docker images
car avec la génération de l'image intermédiaire suivante, l'image précédente est supprimée. Et à la fin, nous n'en avons qu'une qui est l'image finale.
La balise que nous fournissons en utilisant -t
ou --tag
est pour la version finale, et évidemment aucun conteneur intermédiaire n'est étiqueté avec le même.
EXPLICATION DU PROBLÈME
Lorsque nous essayons de créer une image Docker avec Dockerfile, le processus ne se termine pas toujours avec un message similaire comme Successfully built image with IMAGEID
Il est donc tellement évident que la construction qui a échoué ne sera pas répertoriée dans docker images
Maintenant, l'image avec la balise <none>
est une autre image (intermédiaire). Cela crée une confusion selon laquelle l'image existe mais sans balise, mais l'image n'est en fait pas ce que la construction finale devrait être, donc pas balisée.
L'une des solutions de contournement pour ce cas, exécutez la commande ci-dessous immédiatement après la commande de génération, si toutes les autres images ont déjà été testées.
docker tag $(docker image ls | grep "<none>" | awk '{print $3}') newimage:latest
Comme je sais, cela ne fonctionnera que sous Linux OS.
Il n'y a rien de mal avec Docker.
Une image peut avoir plusieurs balises:
Alpine 3.4 4e38e38c8ce0 6 weeks ago 4.799 MB
Alpine latest 4e38e38c8ce0 6 weeks ago 4.799 MB
Dans cet exemple, l'image avec l'ID 4e38e38c8ce0
est tagué Alpine:latest
et Alpine:3.4
. Si vous deviez exécuter docker build -t Alpine .
la balise latest
serait supprimée de l'image 4e38e38c8ce0
et affecté à la nouvelle image (qui a un identifiant différent).
Si vous supprimez le dernier tag
d'une image, l'image n'est pas supprimée automatiquement. Il apparaît comme <none>
.
Docker utilise également un cache. Donc, si vous créez une image avec un Dockerfile, modifiez ce fichier, reconstruisez l'image et que vous annulez la modification et que vous reconstruisez à nouveau, vous aurez deux images - l'image que vous avez créée à la première et à la dernière étape est la même. La deuxième image sera "taguée" <none>
.
Si vous souhaitez conserver plusieurs versions d'une image, utilisez docker build -t
tag:version
image:tag .
où version
tag
est modifié à chaque fois que vous apportez des modifications.
Edit : Ce que j'ai appelé tag est en fait le nom de l'image et ce que j'ai appelé version est appelé tag: https: //docs.docker .com/engine/reference/commandline/tag /