127 votes

Comment puis-je échapper à un signe dollar $ dans un fichier docker compose ?

J'ai un scalaire YAML qui génère l'erreur suivante lorsque j'essaie d'évaluer mon fichier docker-compose.yml fichier :

ERREUR : format d'interpolation non valide pour l'option "environment" dans le service "time_service". service "time_service" : "${Time.now}"

YAML :

---
version: '2'
services:
  time_service:
    build: "."
    environment:
      TIME: "${Time.now}"

Comment puis-je conserver la même sortie de chaîne que celle écrite, mais éviter que le docker-compose l'interprète comme une interpolation de chaîne défectueuse ?

1 votes

Ce n'est pas l'analyseur YAML qui interprète cette chaîne. YAML ne sait pas ce qu'est un ${} . L'interprétation se fait par docker-compose et qui est écrit en Python, l'étiquette ruby n'était donc pas appropriée non plus.

196voto

Anthon Points 4119

Vous frappez le docker-compose la substition de variables, qui est bien documentée ici :

Les deux sites $VARIABLE et ${VARIABLE} sont prises en charge. Des fonctionnalités étendues de type shell, telles que ${VARIABLE-default} et ${VARIABLE/foo/bar} ne sont pas prises en charge.

Vous pouvez utiliser un $$ (double signe dollar) lorsque votre configuration nécessite un signe dollar littéral. Cela empêche également Compose d'interpoler une valeur, de sorte qu'un fichier $$ vous permet de faire référence à des variables d'environnement que vous ne souhaitez pas voir traitées par Compose.

docker-compose est écrit en Python, comme vous le voyez sur github Le mécanisme de doublement permettant de retrouver la signification originale des caractères spéciaux se trouve dans de nombreux programmes. J'ai moi-même dû l'utiliser en programmant, dès 1984.

0 votes

Quelle est la différence fonctionnelle entre la variable avec et sans les accolades ? $VARIABLE vs ${VARIABLE} ?

0 votes

Si le $VARIABLE est suivi directement d'un caractère alphabétique ( $VARIABLEX vous devrez utiliser l'option plus verbeuse ${VARIABLE}X

47voto

Nathan Hanna Points 66

J'ai trouvé la réponse en copiant la suggestion pour % caractères dans ce poste

Il faut un double signe dollar $$ .

J'avais donc besoin "$${Time.now}" ce qui donne "${Time.now}"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X