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

90

J'ai un scalaire YAML qui lance l'erreur suivante lorsque j'essaye d'évaluer mon docker-compose.ymlfichier:

ERREUR: format d'interpolation non valide pour l'option "environnement" du 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?

Nathan Hanna
la source
1
Ce n'est pas l'analyseur YAML qui interprète cette chaîne. YAML ne sait rien ${}. L'interprétation est faite par docker-composeet est écrite en Python, donc la balise ruby ​​était également inappropriée.
Anthon
J'ai supprimé l'hypothèse incorrecte selon laquelle il s'agit d'un problème YAML. Cela a induit en erreur
Anthon

Réponses:

130

Vous docker-composefrappez la sous-station variable, qui est bien documentée ici :

Les deux $VARIABLEet la ${VARIABLE}syntaxe sont pris en charge. Les fonctionnalités de style shell étendues, telles que ${VARIABLE-default}et ${VARIABLE/foo/bar}, ne sont pas prises en charge.

Vous pouvez utiliser un $$(signe double dollar) lorsque votre configuration a besoin d'un signe dollar littéral. Cela empêche également Compose d'interpoler une valeur, donc a $$vous permet de faire référence à des variables d'environnement que vous ne souhaitez pas traiter par Compose.

docker-composeest écrit en Python, comme vous le voyez sur github , le mécanisme de doublement pour obtenir la signification originale des caractères spéciaux peut être trouvé dans de nombreux programmes, j'avais besoin de l'utiliser moi-même, lors de la programmation, dès 1984.

Anthon
la source
37

J'ai trouvé la réponse en copiant la suggestion de %caractères dans cet article

Cela nécessite un double signe dollar $$.

J'avais donc besoin "$${Time.now}", qui évalue à"${Time.now}"

Nathan Hanna
la source