Jak mogę uniknąć znaku dolara $ w pliku redagowania Dockera?


90

Mam skalar YAML, który generuje następujący błąd, gdy próbuję ocenić mój docker-compose.ymlplik:

BŁĄD: Nieprawidłowy format interpolacji dla opcji „środowisko” w usłudze „usługa_czasu”: „$ {Time.now}”

YAML:

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

Jak mogę zachować te same dane wyjściowe w postaci ciągów, co napisane, ale uniknąć interpretowania ich przez docker-compose jako wadliwej interpolacji ciągów?


1
To nie parser YAML interpretuje ten ciąg. YAML o tym nie wie ${}. Interpretacja jest wykonywana docker-composei jest napisana w Pythonie, więc tag ruby ​​również był nieodpowiedni.
Anthon

Usunąłem nieprawidłowe założenie, że jest to problem z YAML. Spowodowało to, że co najmniej jeszcze jedna osoba została wprowadzona w błąd i straciła czas
Anthon

Odpowiedzi:


130

Uderzasz w docker-composezmienną substytucję, która jest dobrze udokumentowana tutaj :

Obsługiwane są obie $VARIABLEi ${VARIABLE}składnia. Rozszerzone funkcje w stylu powłoki, takie jak ${VARIABLE-default}i ${VARIABLE/foo/bar}, nie są obsługiwane.

Możesz użyć $$(podwójnego znaku dolara), gdy konfiguracja wymaga dosłownego znaku dolara. Zapobiega to również interpolowaniu wartości przez funkcję Compose, więc a $$umożliwia odwoływanie się do zmiennych środowiskowych, których nie chcesz przetwarzać przez funkcję Compose.

docker-composejest napisany w Pythonie, jak widać na githubie , mechanizm podwojenia, aby uzyskać oryginalne znaczenie znaków specjalnych, można znaleźć w wielu programach, sam musiałem tego używać podczas programowania, już w 1984 roku.


37

Znalazłem odpowiedź, kopiując sugestię dotyczącą %postaci w tym poście

Wymaga podwójnego znaku dolara $$.

Więc potrzebowałem "$${Time.now}", co ocenia"${Time.now}"

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.