Definiowanie wartości logicznej w pliku docker-compose.yml:
environment:
SOME_VAR: true
i prowadzenie docker up
wyników w:
contains true, which is an invalid type, it should be a string, number, or a null
Próby rozwiązania problemu
- Jeśli wartość true zostanie zmieniona na True, problem będzie się powtarzał.
Używanie
'true'
nie jest akceptowana przez samego kodu ( app ramy gra jest uruchamiana za pomocą./target/universal/stage/bin/APPNAME -Dplay.evolutions.db.default.autoApply=
IE albo-Dplay.evolutions.db.default.autoApply=true
czy-Dplay.evolutions.db.default.autoApply=false
parametr):VAR ma typ STRING, a nie BOOLEAN
Użycie
yes
lubno
jako zmiennej powoduje:zawiera true, który jest niepoprawnym typem, powinien być ciągiem, liczbą lub null
Używanie
yes
i używanie skryptu, który przekształcayes
się w prawdziwe dzieła
Dyskusja
Według dokumentów Any boolean values; true, false, yes no, need to be enclosed in quotes to ensure they are not converted to True or False by the YML parser
:
Środowisko
Dodaj zmienne środowiskowe. Możesz użyć tablicy lub słownika. Wszelkie wartości logiczne; prawda, fałsz, tak nie, muszą być ujęte w cudzysłowy, aby upewnić się, że nie zostaną przekonwertowane na parser YML na Prawdę lub Fałsz.
Zmienne środowiskowe tylko z kluczem są rozpoznawane na ich wartościach na komputerze, na którym działa Compose, co może być pomocne w przypadku wartości tajnych lub specyficznych dla hosta.
environment: RACK_ENV: development SHOW: 'true' SESSION_SECRET: environment: - RACK_ENV=development - SHOW=true - SESSION_SECRET
Pytanie
Dlaczego nie jest to dozwolone?
źródło
DevOps Stack Exchange is a question and answer site for software engineers working on automated testing, continuous delivery, service integration and monitoring, and building SDLC infrastructure
Odpowiedzi:
Pochodzą one z wyboru projektu języka YAML na temat booleanów
Każda niecytowana wartość pasująca do tego „wyrażenia regularnego”:
Zostanie przekonwertowany na
True
lubFalse
.To zaczyna powodować problem, gdy twój kod przetestuje wartość środowiska na tak lub nie, na przykład biorąc ten skrypt (inne przykłady w komentarzu PR ):
I ustawienie w pliku tworzenia
Spowoduje
SOME_VAR
toTrue
, że będzie działał, gdy skrypt zostanie uruchomiony, a zatem weźmie niewłaściwy przypadek, ponieważ nie jest równyyes
.Więc wybór został złożony do zabronić logiczna , aby zapobiec niechcianych zachowań trudne do debugowania, gdy nie jesteś świadomy reguły YAML.
Widzę dwa sposoby na rozwiązanie problemu:
Używając
env_file
zamiast tego, nie są one analizowane IIRC i powinny zapobiegać konwersji.Jak już powiedziałeś, użyj skryptu opakowania wokół programu uruchamiającego, aby zdefiniować wartość przed uruchomieniem aplikacji, coś w tym celu powinno zrobić:
źródło
To jest YAML. To interpretuje
true
jako wartość logiczną. Envary muszą być ciągami, stąd wymóg wyraźnego określenia typu za pomocą cudzysłowów.Przetestuj to za pomocą https://www.json2yaml.com/
źródło