2016-11-15 38 views
17

Mam skalarne YAML, który rzuca się następujący błąd, gdy próbuję oceniać moją docker-compose.yml plik:Jak mogę uniknąć znaku dolara w pliku do tworzenia dokerów?

ERROR: Invalid interpolation format for "environment" option in service "time_service": "${Time.now}"

YAML:

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

Jak mogę utrzymać ten sam wyjściowy ciąg jak napisane, ale unikać interpretowania go przez funkcję dokowania jako wadliwej interpolacji ciągów znaków?

+0

To nie parser YAML interpretuje ten ciąg. YAML nie wie o '$ {}'. Interpretacja odbywa się za pomocą 'docker-compose' i jest napisana w Pythonie, więc tag ruby ​​również był niewłaściwy. – Anthon

+0

Usunąłem niepoprawne założenie, że jest to problem z YAML. To spowodowało, że przynajmniej jedna inna osoba [została wprowadzona w błąd i traci czas] (https://stackoverflow.com/questions/45312806/how-to-escape-a-sign-in-an-ansible-host-vars-file) – Anthon

Odpowiedz

27

Jesteś uderzanie zmienną substition docker-compose, który jest dobrze udokumentowany here:

Both $VARIABLE and ${VARIABLE} syntax are supported. Extended shell-style features, such as ${VARIABLE-default} and ${VARIABLE/foo/bar}, are not supported.

You can use a $$ (double-dollar sign) when your configuration needs a literal dollar sign. This also prevents Compose from interpolating a value, so a $$ allows you to refer to environment variables that you don’t want processed by Compose.

docker-compose jest napisany w Pythonie, jak widać na github, Mechanizm podwojenia w celu uzyskania oryginalnego znaczenia znaków specjalnych można znaleźć w wielu programach, potrzebowałem użyć tego samemu, podczas programowania, w 1984 roku.

9

znaleźć odpowiedź kopiując sugestię % znaków this post

To wymaga podwójnego znak dolara $$.

Więc potrzebne "$${Time.now}", które ocenia się "${Time.now}"