Definieren eines Booleschen Werts in einer docker-compose.yml-Datei:
environment:
SOME_VAR: true
und laufende docker up
Ergebnisse in:
contains true, which is an invalid type, it should be a string, number, or a null
Versuche, das Problem zu lösen
- Wenn true in True geändert wird, bleibt das Problem bestehen.
Die Verwendung
'true'
wird vom Code selbst nicht akzeptiert ( eine Play Framework-App wird mit dem Parameter./target/universal/stage/bin/APPNAME -Dplay.evolutions.db.default.autoApply=
, dh entweder-Dplay.evolutions.db.default.autoApply=true
oder, gestartet-Dplay.evolutions.db.default.autoApply=false
):VAR hat eher den Typ STRING als BOOLEAN
Die Verwendung von
yes
oderno
als Variable führt zu:enthält true, was ein ungültiger Typ ist. Es sollte eine Zeichenfolge, eine Zahl oder eine Null sein
Verwenden
yes
und Verwenden eines Skripts, dasyes
in echte Werke umgewandelt wird
Diskussion
Nach den Dokumenten 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
:
Umgebung
Umgebungsvariablen hinzufügen. Sie können entweder ein Array oder ein Wörterbuch verwenden. Beliebige boolesche Werte; true, false, yes no müssen in Anführungszeichen gesetzt werden, um sicherzustellen, dass sie vom YML-Parser nicht in True oder False konvertiert werden.
Umgebungsvariablen mit nur einem Schlüssel werden auf dem Computer, auf dem Compose ausgeführt wird, in ihre Werte aufgelöst. Dies kann für geheime oder hostspezifische Werte hilfreich sein.
environment: RACK_ENV: development SHOW: 'true' SESSION_SECRET: environment: - RACK_ENV=development - SHOW=true - SESSION_SECRET
Frage
Warum ist es nicht erlaubt?
quelle
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
Antworten:
Dies kommt von einer Designauswahl der YAML-Sprache über Boolesche Werte
Jeder nicht zitierte Wert, der diesem "regulären Ausdruck" entspricht:
Wird konvertiert zu
True
oderFalse
.Dies führt zu einem Problem, wenn Ihr Code einen Umgebungswert als "Ja" oder "Nein" testet, indem Sie beispielsweise dieses Skript verwenden (andere Beispiele in der PR-Diskussion ):
Und in Ihrer komponierten Datei einstellen
Wird dazu führen
SOME_VAR
,True
dass das Skript ausgeführt wird, wodurch der falsche Fall verwendet wird, da er nicht gleich istyes
.Deshalb ist die Wahl wurde gemacht , um boolean nicht zulassen unerwünschtes Verhalten schwer zu debuggen zu verhindern , wenn Sie keine Kenntnis von der YAML Regel sind.
Ich sehe zwei Möglichkeiten, um das Problem zu überwinden:
Wenn Sie
env_file
stattdessen ein verwenden, werden sie nicht als IIRC analysiert und sollten die Konvertierung verhindern.Verwenden Sie, wie bereits erwähnt, ein Wrapper-Skript um Ihren Launcher, um den Wert zu definieren, bevor Sie die App starten. Dies sollte folgendermaßen aussehen:
quelle
Das ist YAML. Es wird
true
als Boolescher Wert interpretiert . Envars müssen Zeichenfolgen sein, daher muss der Typ in Anführungszeichen angegeben werden.Testen Sie dies mit https://www.json2yaml.com/
quelle