docker stack: text after an unbraced `$VAR` is dropped when it starts with `-`, `:-`, `?` or `:?`
Maintainer antworten meist innerhalb von 1 Tag
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 87/100
Rechercherichtung
Beginne in cli/compose/template/template.go und untersuche defaultPattern, insbesondere, wie die Gruppen named und braced das Substitutionsmuster verwenden. Reproduziere das Problem mit der bereitgestellten Compose-Datei und docker stack config, vergleiche dann die erwartete Ausgabe mit docker compose config; als erledigt gilt die Aufgabe, wenn Text nach nicht geklammerten Variablen wörtlich bleibt, während geklammerte Modifikatoren weiterhin funktionieren.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Description
In compose files used with docker stack config and docker stack deploy, an unbraced variable that is followed by -, :-, ? or :? is parsed as if it were the braced form with a modifier. The text after the variable is consumed as a default value or an error message.
For example nginx:$NGINX_VERSION-alpine is treated like nginx:${NGINX_VERSION-alpine}, and http://localhost:$PORT?ready=1 like http://localhost:${PORT?ready=1}.
The compose specification, docker compose, and shell parameter expansion only support modifiers in the braced form (${VAR:-default}); for $VAR the following characters are literal.
Reproduce
# c.yml
version: "3.8"
services:
web:
image: "nginx:$NGINX_VERSION-alpine"
healthcheck:
test: ["CMD", "wget", "-q", "http://localhost:$PORT?ready=1"]
$ NGINX_VERSION=1.27 PORT=8080 docker stack config -c c.yml
version: "3.8"
services:
web:
healthcheck:
test:
- CMD
- wget
- -q
- http://localhost:8080
image: nginx:1.27
With PORT unset, the command fails with required variable PORT is missing a value: ready=1.
Expected behavior
$ NGINX_VERSION=1.27 PORT=8080 docker stack config -c c.yml
...
- http://localhost:8080?ready=1
image: nginx:1.27-alpine
This is what docker compose config prints for the same file.
Root cause
In cli/compose/template/template.go the named group of defaultPattern uses the same sub-pattern as the braced group:
subst = "[_a-z][_a-z0-9]*(?::?[-?][^}]*)?"
...
"%s(?i:(?P<escaped>%s)|(?P<named>%s)|{(?P<braced>%s)}|(?P<invalid>))",
delimiter, delimiter, subst, subst,
so the optional (?::?[-?][^}]*) modifier suffix also matches after an unbraced name, and everything up to the next } (or the end of the string) is consumed.
Version
master at 52a2671034814f1ec6145aa8238c5fd4f92d5ee7
- Vorherrschende Sprache
- Go
- Sterne
- 6.1k
- Forks
- 2.2k
- Ø Merge
- 15 Std. 11 Min.
- Gemergte PRs (30 T.)
- 42
Entwicklungsumgebung
- Enthält ein Dockerfile oder eine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus docker/cli
-
filename completion on `docker load -i`Evtl. vergeben @cra hat das vor 5 Tagen übernommen. Offenkind/feature status/0-triage
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
Maintainer antworten meist innerhalb von 1 Tag
-
docker build treats uppercase HTTP(S) URLs as local pathsEvtl. vergeben @TanvirTian hat das vor 12 Tagen übernommen. Offenkind/bug status/0-triage
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
Maintainer antworten meist innerhalb von 1 Tag
-
`docker context export` writes a truncated tar archiveEvtl. vergeben @2arian3 hat das vor 28 Tagen übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 92/100
Maintainer antworten meist innerhalb von 1 Tag
-
Truncating log lines at 75 characters makes them useless.Evtl. vergeben @locker95 hat das vor 72 Tagen übernommen. Offenkind/bug status/0-triage
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
docker/cli#7176 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
cli-plugins/hooks: max-message enforcement is off by oneEvtl. vergeben @fallintoplace hat das vor 150 Tagen übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 74/100
docker/cli#7005 · 2 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
Maintainer antworten meist innerhalb von 1 Tag
-
kind/engineering pulumi/pulumi-terraform Task Workflow Failure
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 64/100
pulumi/pulumi-terraform#1261 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Controllers integration tests fail when port 8080 is in useEvtl. vergeben @noahnut hat das heute übernommen. Offenarea/cluster-autoscaler kind/bug needs-triage
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
kubernetes-sigs/cluster-autoscaler#236 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
MCP: `tasks_bulk_update` always fails with "Need at least one field" — the `fields` projection argument is stripped from non-read tools tooEvtl. vergeben @tink-bot hat das heute übernommen. Offenagent-processed area/api-v2 integration/inbound
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
go-vikunja/vikunja#4235 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 84/100
google/osv-scalibr#2503 ·
Maintainer antworten meist innerhalb von 1 Tag