2017-03-28 3 views
3

Ich führe einen Build auf einer Knotenanwendung und verwenden Sie dann die Artefakte, um ein Docker-Bild zu erstellen. Der COPY-Befehl, der meine Quelle an Ort und Stelle bewegt, erkennt nach einem Build keine Änderungen an den Quelldateien. es verwendet nur den Cache.Warum kopiert COPY in Docker Build Updates

Step 9/12 : COPY server /home/nodejs/app/server ---> Using cache ---> bee2f9334952

Bin ich etwas falsch mit COPY tun oder ist es eine Möglichkeit, einen bestimmten Schritt zu cachen?

Antwort

0

Aus der Sicht von Docker ist dies wie jeder andere Befehl.

Docker sieht, dass diese Zeile nicht geändert hat, so dass es es zwischenspeichert.

Ähnlich, wenn Sie in Ihrer Dockerfile einen curl-Befehl haben, ruft Docker die URL nicht ab, nur um sie zu ändern, wenn sie sich ändert. Es prüft, ob sich der Befehl geändert hat oder nicht, nicht das Ergebnis.

2

Ich finde dies in den docker documentation:

Für die ADD und COPY Anweisungen, der Inhalt der Datei (en) in dem Bild untersucht und eine Prüfsumme für jede Datei berechnet. Die zuletzt geänderten und zuletzt verwendeten Zeiten der Datei (en) werden in diesen Prüfsummen nicht berücksichtigt. Während der Cache-Suche wird die Prüfsumme mit der Prüfsumme in den vorhandenen Bildern verglichen. Wenn sich in den Dateien (z. B. Inhalt und Metadaten) etwas geändert hat, wird der Cache ungültig gemacht.

So weit ich verstehe Cache sollte für ungültig erklärt werden. Sie können --no-cache = true verwenden, um sicherzugehen. Wenn Sie richtiges Verhalten mit --no-cache = true und false erhalten, ohne dass Sie einen Fehler entdeckt hätten, sollten Sie ihn melden.

+0

Danke, es ist gut zu wissen, wie das funktioniert. Ich nahm an, dass der Modifikationszeitstempel berücksichtigt wurde. –

1

Sie könnten stattdessen mit ADD versuchen. Dadurch wird der Cache für die Kopie ungültig gemacht. Die schlechte Seite ist, dass es auch den Cache für die anderen nachfolgenden Befehle ungültig macht. Wenn Ihr ADD in den letzten Schritten ist, sollte dies den Build-Prozess nicht beeinflussen.

Hinweis: Die erste gefundene ADD-Anweisung macht den Cache für alle folgenden Anweisungen aus der Dockerfile ungültig, wenn sich der Inhalt geändert hat. Dies beinhaltet das Ungültigmachen des Cache für RUN-Anweisungen. Weitere Informationen finden Sie im Dockerfile Best Practices-Handbuch. https://docs.docker.com/engine/reference/builder/#add

+0

Das ist auch eine gute Information. –