2016-07-11 15 views
1

auf Lauf bauen ändern würde Ich baue ein Docker Bild eine Befehlszeile wie die Verwendung von folgenden:wenn Docker Bild

docker build -t myimage . 

Sobald dieser Befehl erfolgreich ist, dann erneut ausführt es ein no-op als das Bild ist spezifiziert durch Dockerfile hat sich nicht geändert. Gibt es eine Möglichkeit festzustellen, ob sich die Dockerfile (oder eine der Build-Kontextdateien) nachträglich ändert, ohne diesen Befehl erneut auszuführen?

+0

Was/wie würden Sie es erkennen? Ein laufender Prozess? Wenn du es rennst? – johnharris85

+0

Wie @ldg in seiner Antwort vorschlägt, denke ich, dass ich nach "dry-run" -Option oder ähnlichem suche. –

Antwort

1

Es gibt keine dry-run Option, wenn Sie das suchen. Sie können ein anderes Tag verwenden, um vorhandene Bilder nicht zu beeinflussen, und in der Ausgabe nach suchen (löschen Sie dann das Tag, wenn Sie es nicht möchten).

0

betrachtet man von einem Build zum anderen docker inspect image_name, ändern sich verschiedene Informationen nicht, wenn sich das Docker-Image nicht geändert hat. Einer von ihnen ist der Hafenarbeiter Id. Also habe ich die Id Informationen verwendet, um zu überprüfen, ob ein Andockfenster wie folgt geändert wurde. Erstens kann man das Bild Id erhalten wie folgt:

docker inspect --format {{.Id}} docker_image_name 

Um zu prüfen ob es eine Änderung nach einem Build ist, können Sie die folgenden Schritte aus:

  1. das Bild-ID erhalten, bevor der Build
  2. Bild
  3. bekommen die Bild-ID nach dem Build
  4. Vergleichen Sie die beiden IDs, wenn sie dort keine Änderung, wenn sie nicht viel tun, gab es eine Änderung.

Konkret ist hier ein Arbeits bash Beispiel

docker inspect --format {{.Id}} docker_image_name > deploy/last_image_build_id.log 
# I get the docker last image id from a file 
last_docker_id=$(cat deploy/last_image_build_id.log) 
docker build -t docker_image_name . 
docker_id_after_build=$(docker inspect --format {{.Id}} docker_image_name 
if [ "$docker_id_after_build" != "$last_docker_id" ]; then 
    echo "image changed" 
else 
    echo "image didn't change" 
fi