Interpolación
Los valores en un archivo de Compose se pueden definir mediante variables e interpolar en tiempo de ejecución. Los archivos de Compose utilizan una sintaxis similar a Bash ${VARIABLE}. Se admiten tanto la sintaxis $VARIABLE como ${VARIABLE}.
Para las expresiones entre llaves, se admiten los siguientes formatos:
- Sustitución directa
${VAR}-> valor deVAR
- Valor predeterminado
${VAR:-default}-> valor deVARsi está definida y no está vacía; de lo contrario,default${VAR-default}-> valor deVARsi está definida; de lo contrario,default
- Valor obligatorio
${VAR:?error}-> valor deVARsi está definida y no está vacía; de lo contrario, sale con un error${VAR?error}-> valor deVARsi está definida; de lo contrario, sale con un error
- Valor alternativo
${VAR:+replacement}->replacementsiVARestá definida y no está vacía; de lo contrario, vacío${VAR+replacement}->replacementsiVARestá definida; de lo contrario, vacío
La interpolación también se puede anidar:
${VARIABLE:-${FOO}}${VARIABLE?$FOO}${VARIABLE:-${FOO:-default}}
Compose no admite otras funciones de estilo shell extendido, como ${VARIABLE/foo/bar}.
Compose procesa cualquier cadena que siga a un símbolo $ siempre que constituya una definición de variable válida: ya sea un nombre alfanumérico ([_a-zA-Z][_a-zA-Z0-9]*) o una cadena entre llaves que comience con ${. En otras circunstancias, se conservará sin intentar interpolar ningún valor.
Puedes utilizar $$ (doble símbolo de dólar) cuando tu configuración requiera un símbolo de dólar literal. Esto también evita que Compose interpole un valor, por lo que un $$ te permite hacer referencia a variables de entorno que no deseas que Compose procese.
web:
build: .
command: "$$VAR_NOT_INTERPOLATED_BY_COMPOSE"Si Compose no puede resolver una variable sustituida y no se ha definido ningún valor predeterminado, muestra una advertencia y sustituye la variable por una cadena vacía.
Dado que cualquier valor de un archivo de Compose se puede interpolar mediante la sustitución de variables, incluida la notación de cadena compacta para elementos complejos, la interpolación se aplica antes de la fusión en cada archivo por separado.
La interpolación se aplica únicamente a los valores YAML, no a las claves. Para los pocos lugares donde las claves son en realidad cadenas arbitrarias definidas por el usuario, como labels o environment, se debe utilizar una sintaxis alternativa con el signo igual para que se aplique la interpolación. Por ejemplo:
services:
foo:
labels:
"$VAR_NOT_INTERPOLATED_BY_COMPOSE": "BAR"services:
foo:
labels:
- "$VAR_INTERPOLATED_BY_COMPOSE=BAR"