Docker hat einen Cache, was großartig ist, aber alles, was ich in der Ausgabe von "Docker Build" sehe, ist entweder:
---> Using cache
oder die Ausgabe des Befehls (was bedeutet, dass der Cache nicht verwendet wird).
Nach einem Schritt in meinem Dockerfile (eine Kopie) wird der Cache offensichtlich nicht verwendet. Aber ich bin mir ziemlich sicher, dass sich an dem Ordner, den es kopiert, nichts geändert hat. (Es ist unsere Anwendung, und ich stoße auf den No-Cache-Fall, auch wenn ich zum Beispiel zweimal hintereinander bereitstelle.)
Gibt es eine Möglichkeit, Docker dazu zu bringen, mir mitzuteilen, was sich seiner Meinung nach geändert hat?
Ich weiß, dass Docker verwendet hat, um Zeitstempel dafür zu überprüfen, aber das wurde in Docker 1.8 behoben, und ich bin auf Docker 1.9.x hier.
Dockerfile
FROM ubuntu:14.04
MAINTAINER me
COPY /app/ /app/
dies zeigen wird. Und ich werde nicht meinen gesamten Quellcode und meine gesamte Infrastruktur veröffentlichen.Antworten:
Verwenden Sie die binäre Suche mit
.dockerignore
.Fügen Sie die Hälfte Ihrer Dateien hinzu
.dockerignore
und erstellen Sie den Container. Wenn der Cache für denCOPY
Schritt verwendet wird, wissen Sie, dass sich die geänderten Dateien in dem Satz befinden, den Sie ignoriert haben. Andernfalls wissen Sie, dass sie sich in der anderen Hälfte befinden. Wiederholen Sie diesen Test mit der Gruppe von Dateien, für die die Änderung gilt, bis es sich nur noch um eine Datei / einen Ordner handelt.(Liebes Lazyweb: Finde heraus, wie du Docker erweitern kannst, um dies weniger schmerzhaft zu machen!)
quelle