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

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

Erreur: format d'interpolation non valide pour l'option "environnement" dans service "time_service": "$ {heure.maintenant}"

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?

31
demandé sur Anthon 2016-11-15 23:58:57

2 réponses

Vous frappez la substitution de variable docker-compose, qui est bien documentée ici:

Les syntaxes $VARIABLE et ${VARIABLE} sont prises en charge. Les fonctionnalités étendues de style shell, 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 un $$ vous permet de faire référence à des variables d'environnement que vous ne faites pas voulez traité par composer.

docker-compose est écrit en Python, comme vous le voyez sur github , le mécanisme de doublement pour obtenir le sens original des caractères spéciaux peut être trouvé dans de nombreux programmes, je devais l'utiliser moi-même, tout en programmant, dès 1984.

47
répondu Anthon 2016-11-16 18:45:02

Trouvé la réponse en copiant la suggestion pour % caractères dans ce post

Il nécessite un signe double dollar $$.

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

15
répondu Nathan Hanna 2017-06-07 17:58:57