web-dev-qa-db-fra.com

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

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

ERREUR: format d'interpolation non valide pour l'option "environment" 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, tout en évitant que le composeur-docker l'interprète comme une interpolation de chaîne défectueuse?

55
Nathan Hanna

Vous frappez le docker-compose station variable, bien documentée ici :

Tous les deux $VARIABLE et ${VARIABLE} _ syntaxe sont supportés. Fonctionnalités de style shell étendu, telles que ${VARIABLE-default} et ${VARIABLE/foo/bar}, ne sont pas supportés.

Vous pouvez utiliser un $$ (signe dollar double) lorsque votre configuration nécessite 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 souhaitez pas traiter par Compose.

docker-compose est écrit en Python, comme vous le voyez sur github , le mécanisme de doublage permettant d’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 pendant la programmation en 1984.

85
Anthon

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

Il faut un double signe dollar $$.

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

28
Nathan Hanna