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 27 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
-
pre-migration
Schwierigkeit 1/5 1-3 Stunden Anfängerfreundlichkeit 88/100
Maintainer antworten meist innerhalb von 1 Tag
-
client.HTTPFetcher doesn't close non-200 response bodies, so connections leakEvtl. vergeben @grempe hat das heute übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
transparency-dev/tessera#1245 ·
Maintainer antworten meist innerhalb von 2 Tagen
-
Schwierigkeit 1/5 1-3 Stunden Anfängerfreundlichkeit 77/100
Maintainer antworten meist innerhalb von 1 Tag
-
bug e2e
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
shaiknoorullah/hg-mono#1086 ·
Maintainer antworten meist innerhalb von 1 Tag
-
native
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
prime-radiant-inc/evener#4839 ·
Maintainer antworten meist innerhalb von 1 Tag