docker stack: text after an unbraced `$VAR` is dropped when it starts with `-`, `:-`, `?` or `:?`
I maintainer di solito rispondono entro 1 giorno
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 87/100
Direzione di ricerca
Inizia da cli/compose/template/template.go e analizza defaultPattern, in particolare il modo in cui i gruppi named e braced usano il pattern di sostituzione. Riproduci il problema con il file compose fornito e docker stack config, quindi confronta l'output atteso con docker compose config; il lavoro è completo quando il testo dopo le variabili senza parentesi graffe rimane letterale, mentre i modificatori tra parentesi graffe continuano a funzionare.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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
- Lingua principale
- Go
- Stelle
- 6.1k
- Fork
- 2.2k
- Merge medio
- 15h 11m
- PR unite (30g)
- 42
Preparare l'ambiente
- Include un Dockerfile o un file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di docker/cli
-
filename completion on `docker load -i`Forse già presa @cra l’ha presa 5 giorni fa. Apertakind/feature status/0-triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
I maintainer di solito rispondono entro 1 giorno
-
docker build treats uppercase HTTP(S) URLs as local pathsForse già presa @TanvirTian l’ha presa 12 giorni fa. Apertakind/bug status/0-triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
I maintainer di solito rispondono entro 1 giorno
-
`docker context export` writes a truncated tar archiveForse già presa @2arian3 l’ha presa 28 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 92/100
I maintainer di solito rispondono entro 1 giorno
-
Truncating log lines at 75 characters makes them useless.Forse già presa @locker95 l’ha presa 72 giorni fa. Apertakind/bug status/0-triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
docker/cli#7176 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
cli-plugins/hooks: max-message enforcement is off by oneForse già presa @fallintoplace l’ha presa 151 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
docker/cli#7005 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 63/100
I maintainer di solito rispondono entro 1 giorno
-
[Bug]: APIGW request ID headers are inconsistent between server and clientForse già presa @zouxingyuks l’ha presa oggi. Apertaproduct/backlog
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
TencentBlueKing/bk-nodemgr#3782 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 91/100
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
praetorianer777/Dynamo#53 ·
I maintainer di solito rispondono entro 1 giorno
-
internal test setup
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
SAP/terraform-provider-scc#430 ·