Interpolation
Les valeurs d'un fichier Compose peuvent être définies par des variables et interpolées à l'exécution. Les fichiers Compose utilisent une syntaxe de type
Bash ${VARIABLE}
. Les syntaxes $VARIABLE
et ${VARIABLE}
sont toutes deux prises en charge.
Pour les expressions entre accolades, les formats suivants sont pris en charge :
- Substitution directe
${VAR}
-> valeur deVAR
- Valeur par défaut
${VAR:-default}
-> valeur deVAR
si définie et non vide, sinondefault
${VAR-default}
-> valeur deVAR
si définie, sinondefault
- Valeur requise
${VAR:?error}
-> valeur deVAR
si définie et non vide, sinon sortir avec erreur${VAR?error}
-> valeur deVAR
si définie, sinon sortir avec erreur
- Valeur alternative
${VAR:+replacement}
->replacement
siVAR
est définie et non vide, sinon vide${VAR+replacement}
->replacement
siVAR
est définie, sinon vide
L'interpolation peut aussi être imbriquée :
${VARIABLE:-${FOO}}
${VARIABLE?$FOO}
${VARIABLE:-${FOO:-default}}
Les autres fonctionnalités étendues de style shell, telles que ${VARIABLE/foo/bar}
, ne sont pas
prises en charge par Compose.
Compose traite toute chaîne suivant un signe $
tant qu'elle en fait
une définition de variable valide - soit un nom alphanumérique ([_a-zA-Z][_a-zA-Z0-9]*
)
ou une chaîne entre accolades commençant par ${
. Dans d'autres circonstances, elle sera préservée sans tentative d'interpolation d'une valeur.
Vous pouvez utiliser un $$
(double signe dollar) quand votre configuration nécessite un
signe dollar littéral. Cela empêche aussi Compose d'interpoler une valeur, donc un $$
vous permet de faire référence à des variables d'environnement que vous ne voulez pas traitées par
Compose.
web:
build: .
command: "$$VAR_NOT_INTERPOLATED_BY_COMPOSE"
Si Compose ne peut pas résoudre une variable substituée et qu'aucune valeur par défaut n'est définie, il affiche un avertissement et substitue la variable avec une chaîne vide.
Comme toutes les valeurs dans un fichier Compose peuvent être interpolées avec substitution de variable, y compris la notation de chaîne compacte pour les éléments complexes, l'interpolation est appliquée avant une fusion sur une base par fichier.
L'interpolation s'applique seulement aux valeurs YAML, pas aux clés. Pour les quelques endroits où les clés sont en fait des chaînes arbitraires définies par l'utilisateur, telles que labels ou environment, une syntaxe alternative de signe égal doit être utilisée pour que l'interpolation s'applique. Par exemple :
services:
foo:
labels:
"$VAR_NOT_INTERPOLATED_BY_COMPOSE": "BAR"
services:
foo:
labels:
- "$VAR_INTERPOLATED_BY_COMPOSE=BAR"