2016-08-05 21 views
3

Ich habe versucht, ein Docker-Image mit einer lokal verfügbaren Dockerfile zu erstellen.Docker-Build-Befehl mit --tag kann Bilder nicht markieren

docker build -t newimage . 

ich diesen Befehl verwendet haben früher mehrmals zu, aber irgendwie ist es nicht gerade arbeiten, und ich stecke Suche nach dem Grund dafür.

Ich werde wirklich hilfreich sein, wenn mir jemand mit einer möglichen Lösung oder einem möglichen Bereich helfen kann, nach einem Problem zu suchen.

ich hatte bereits einen Blick auf andere Stellen, die zum Beispiel im Zusammenhang haben könnte: Docker build tag repository name

+0

Was ist die Fehlermeldung, die Sie erhalten? – Martin

+0

Keine Fehlermeldung. Wenn ich "docker images" starte, gibt es kein Bild mit einem solchen Tag, stattdessen habe ich ein Bild mit dem Tag '' – Harshil

+0

Dann scheint es, als ob Sie bereits ein Image mit demselben Tag erstellt haben, aber ein anderes 'Dockerfile' (oder Änderungen an es). Docker löscht den Container nicht, er entfernt nur das Tag, was zu "" führt. – Martin

Antwort

4

Stimmt! Ich habe den Grund für das Problem herausgefunden.

DOCKER Bauprozess

Wenn wir ein Bild Andockfensters bauen, während ein Bild mehrere andere Zwischenbilder in dem Prozess erzeugt werden, zu schaffen. Wir sehen sie nie in docker images, weil mit der Erzeugung des nächsten Zwischenbildes das frühere Bild entfernt wird. Und am Ende haben wir nur einen, der das endgültige Bild ist.

Das Tag, das wir mit -t oder --tag bereitstellen, ist für den endgültigen Build, und offensichtlich ist kein Zwischencontainer mit dem gleichen Tag markiert.

AUSGABE ERKLÄRUNG

Wenn wir versuchen, ein Docker Bild mit Dockerfile manchmal zu bauen ist der Prozess nicht erfolgreich mit einer ähnlichen Nachricht abgeschlossen wie Successfully built image with IMAGEID

So ist es so offensichtlich, dass der Bau, die versagt hat wird nicht aufgeführt in docker images

Jetzt ist das Bild mit dem Tag <none> ein anderes Bild (intermediate). Dies erzeugt eine Verwirrung, dass das Bild existiert, aber ohne ein Tag, aber das Bild ist eigentlich nicht das, was der endgültige Build sein sollte, daher nicht markiert.

+0

Es sollte eine Fehlermeldung angezeigt werden, die besagt, dass der Build nicht erfolgreich war. Hast du das nicht gesehen? – Henry

+0

Nein, es gab keine solche Nachricht! Ich machte einen Tippfehler in einem Befehl, also gab es ein Protokoll, das sagte, dass der Befehl eine Ausgabe ungleich Null zurückgab, '/ bin/sh: 1: s: nicht gefunden Der Befehl '/ bin/sh -cs' gab eine Nicht-Null zurück Code: 127 'so etwas wie .. aber es gab keine Fehlermeldung vom Docker-Daemon. – Harshil

0

Es ist nichts falsch mit Docker.

Ein Bild kann mehrere Tags haben:

alpine 3.4  4e38e38c8ce0  6 weeks ago   4.799 MB 
alpine latest 4e38e38c8ce0  6 weeks ago   4.799 MB 

In diesem Beispiel wird das Bild mit der ID 4e38e38c8ce0alpine:latest und alpine:3.4 markiert. Wenn Sie docker build -t alpine . ausführen, wird das latest-Tag aus dem Bild 4e38e38c8ce0 entfernt und dem neu erstellten Bild zugewiesen (das eine andere ID hat).

Wenn Sie die letzte tag aus einem Bild entfernen, wird das Bild nicht automatisch gelöscht. Es erscheint als <none>.

Docker verwendet auch einen Cache. Wenn Sie also ein Bild mit einer Docker-Datei erstellen, diese Datei ändern, das Bild erneut erstellen und dann die Änderung rückgängig machen und erneut erstellen, haben Sie zwei Bilder - das Bild, das Sie im ersten und letzten Schritt erstellt haben, ist dasselbe. Das zweite Bild wird "getaggt" <none>.

Wenn Sie mehrere Version eines Bildes verwenden docker build -ttag:versionimage:tag . wo versiontag geändert wird jedes Mal, wenn Sie einige Änderungen behalten möchten.

bearbeiten: Was ich Tag aufgerufen ist eigentlich das Bild Namen und was ich rief Version wird das Tag genannt: https://docs.docker.com/engine/reference/commandline/tag/

+1

Informationen angesehen hast aber das ist nicht das, wonach ich suche. Es ist kein Problem in Bezug auf mehrere Bilder mit demselben Namen. danke anyways – Harshil

+0

Als bitte teilen Sie die Ausgabe des 'docker build' Befehls sowie' docker images' – Martin

+0

danke für die Mühe. Ich habe das Problem herausgefunden und die Antwort geschrieben – Harshil