⚠️ Traduction non officielle - Cette documentation est une traduction communautaire non officielle de Docker.

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 de VAR
  • Valeur par défaut
    • ${VAR:-default} -> valeur de VAR si définie et non vide, sinon default
    • ${VAR-default} -> valeur de VAR si définie, sinon default
  • Valeur requise
    • ${VAR:?error} -> valeur de VAR si définie et non vide, sinon sortir avec erreur
    • ${VAR?error} -> valeur de VAR si définie, sinon sortir avec erreur
  • Valeur alternative
    • ${VAR:+replacement} -> replacement si VAR est définie et non vide, sinon vide
    • ${VAR+replacement} -> replacement si VAR 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"