Resultierende Konfiguration ohne Build ausgeben
In diesem letzten Schritt untersuchen wir, wie die finale Konfiguration angezeigt werden kann, die docker buildx bake
für ein bestimmtes Target verwenden würde - inklusive aller mit dem --set
-Flag angewendeten Überschreibungen - ohne tatsächlich einen Build auszulösen. Dies ist nützlich zum Debuggen von Bake-Dateien und zum Verständnis der effektiven Konfiguration vor dem Build.
Das --print
-Flag mit docker buildx bake
ermöglicht die Ausgabe der aufgelösten Konfiguration im JSON-Format.
Stellen Sie sicher, dass Sie sich im Verzeichnis ~/project
befinden.
cd ~/project
Lassen Sie uns die Konfiguration für das my-app-dev
-Target ausgeben.
docker buildx bake my-app-dev --print
Dieser Befehl gibt eine JSON-Darstellung der my-app-dev
-Target-Konfiguration aus, wie sie aus der docker-bake.hcl
-Datei abgeleitet wird.
{
"target": {
"my-app-dev": {
"dockerfile": "Dockerfile",
"context": ".",
"tags": ["my-app:dev"]
}
}
}
Nun sehen wir, wie das --set
-Flag die ausgegebene Konfiguration beeinflusst. Wir geben die Konfiguration für my-app-dev
aus, während wir den Tag auf my-app:testing
überschreiben.
docker buildx bake my-app-dev --set my-app-dev.tags=my-app:testing --print
Beobachten Sie die Ausgabe. Das tags
-Attribut in der JSON-Ausgabe sollte nun den überschriebenen Wert widerspiegeln.
{
"target": {
"my-app-dev": {
"dockerfile": "Dockerfile",
"context": ".",
"tags": ["my-app:testing"]
}
}
}
Ebenso können Sie die Konfiguration für das my-app-prod
-Target ausgeben und dessen Build-Argument überschreiben.
docker buildx bake my-app-prod --set my-app-prod.args.BUILD_ENV=staging --print
Die JSON-Ausgabe für das my-app-prod
-Target zeigt die args
mit dem überschriebenen BUILD_ENV
-Wert.
{
"target": {
"my-app-prod": {
"dockerfile": "Dockerfile",
"context": ".",
"tags": ["my-app:prod"],
"args": {
"BUILD_ENV": "staging"
}
}
}
}
Das --print
-Flag ist ein wertvolles Werkzeug, um Bake-Datei-Konfigurationen zu überprüfen und zu verstehen, wie Überschreibungen angewendet werden, bevor potenziell zeitaufwändige Builds initiiert werden.