Définition d'un booléen dans un fichier docker-compose.yml:
environment:
SOME_VAR: true
et les docker up
résultats en cours d'exécution dans:
contains true, which is an invalid type, it should be a string, number, or a null
Tentatives de résolution du problème
- Si true est changé en True, le problème persiste.
L'utilisation
'true'
n'est pas acceptée par le code lui-même ( une application de structure de lecture est démarrée à l'aide du paramètre./target/universal/stage/bin/APPNAME -Dplay.evolutions.db.default.autoApply=
, c'est-à-dire soit-Dplay.evolutions.db.default.autoApply=true
ou-Dplay.evolutions.db.default.autoApply=false
):VAR a le type STRING plutôt que BOOLEAN
L'utilisation de
yes
ouno
comme variable entraîne:contient true, qui est un type non valide, il doit s'agir d'une chaîne, d'un nombre ou d'une valeur nulle
Utiliser
yes
et utiliser un script qui se transformeyes
en véritables œuvres
Discussion
Selon les documents 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
:
Environnement
Ajoutez des variables d'environnement. Vous pouvez utiliser un tableau ou un dictionnaire. Toutes les valeurs booléennes; true, false, yes no, doivent être placés entre guillemets pour garantir qu'ils ne sont pas convertis en True ou False par l'analyseur YML.
Les variables d'environnement avec seulement une clé sont résolues à leurs valeurs sur la machine sur laquelle Compose s'exécute, ce qui peut être utile pour les valeurs secrètes ou spécifiques à l'hôte.
environment: RACK_ENV: development SHOW: 'true' SESSION_SECRET: environment: - RACK_ENV=development - SHOW=true - SESSION_SECRET
Question
Pourquoi est-ce interdit?
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
Réponses:
Cela vient d'un choix de conception du langage YAML sur les booléens
Chaque valeur non cotée correspondant à cette "expression régulière":
Sera converti en
True
ouFalse
.Cela commence à poser un problème lorsque votre code testera une valeur d'environnement pour être oui ou non, par exemple en prenant ce script (autres exemples dans la discussion PR ):
Et mettre dans votre fichier de composition
Se traduira par
SOME_VAR
êtreTrue
lorsque le script s'exécutera, prenant donc le mauvais cas car il n'est pas égal àyes
.Le choix a donc été fait de ne pas autoriser les booléens pour éviter les comportements indésirables difficiles à déboguer lorsque vous n'êtes pas au courant de la règle YAML.
Je vois deux façons de surmonter le problème:
En utilisant un à la
env_file
place, ils ne sont pas analysés IIRC et devraient empêcher la conversion.Comme vous l'avez déjà dit, utilisez un script wrapper autour de votre lanceur pour définir la valeur à la place avant de lancer l'application, quelque chose dans le sens de cela devrait faire:
la source
C'est YAML. Il interprète
true
comme un booléen. Les envars doivent être des chaînes, d'où l'obligation de rendre le type explicite via des guillemets.Testez cela avec https://www.json2yaml.com/
la source