Come posso sfuggire al simbolo $ dollaro in un file di composizione Docker?


97

Ho uno scalare YAML che genera il seguente errore quando provo a valutare il mio docker-compose.ymlfile:

ERRORE: formato di interpolazione non valido per l'opzione "ambiente" nel servizio "time_service": "$ {Time.now}"

YAML:

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

Come posso mantenere lo stesso output di stringa come scritto, ma evitare che docker-compose lo interpreti come un'interpolazione di stringhe errata?


1
Non è il parser YAML che interpreta quella stringa. YAML non lo sa ${}. L'interpretazione viene eseguita da docker-composee viene scritta in Python, quindi anche il tag ruby ​​era inappropriato.
Anthon

Ho rimosso il presupposto errato che si tratti di un problema YAML. Almeno un'altra persona è stata fuorviata e ha perso tempo
Anthon

Risposte:


142

È possibile utilizzare un $$(doppio segno di dollaro) quando la configurazione richiede un simbolo di dollaro letterale.

Stai colpendo la docker-composesostituzione della variabile, che è ben documentata qui :

Sia $VARIABLEe ${VARIABLE}sintassi sono supportati. Le funzionalità estese in stile shell, come ${VARIABLE-default}e ${VARIABLE/foo/bar}, non sono supportate.

È possibile utilizzare un $$(doppio segno di dollaro) quando la configurazione richiede un simbolo di dollaro letterale. Ciò impedisce anche a Compose di interpolare un valore, quindi a $$consente di fare riferimento a variabili di ambiente che non si desidera vengano elaborate da Compose.

docker-composeè scritto in Python, come vedete su GitHub , il meccanismo di raddoppio per ottenere il significato originale dei caratteri speciali si trova in molti programmi, avevo bisogno di usarlo io stesso, durante la programmazione, già nel 1984.


38

Ho trovato la risposta copiando il suggerimento per i %personaggi in questo post

Richiede un doppio segno di dollaro $$.

Quindi avevo bisogno "$${Time.now}", che restituisce"${Time.now}"

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.