Definir un booleano en un archivo docker-compose.yml:
environment:
SOME_VAR: true
y docker up
resultados de ejecución en:
contains true, which is an invalid type, it should be a string, number, or a null
Intenta resolver el problema
- Si verdadero se cambia a Verdadero, el problema persiste.
El uso
'true'
no es aceptado por el código en sí mismo ( una aplicación de Play Framework se inicia usando./target/universal/stage/bin/APPNAME -Dplay.evolutions.db.default.autoApply=
, es decir,-Dplay.evolutions.db.default.autoApply=true
o-Dplay.evolutions.db.default.autoApply=false
parámetro)VAR tiene tipo STRING en lugar de BOOLEAN
El uso de
yes
ono
como variable da como resultado:contiene verdadero, que es un tipo no válido, debe ser una cadena, un número o un valor nulo
Usando
yes
y usando un script que se transformayes
en verdaderas obras
Discusión
Según los documentos 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
:
Medio ambiente
Agregar variables de entorno. Puede usar una matriz o un diccionario. Cualquier valor booleano; verdadero, falso, sí no, debe incluirse entre comillas para asegurarse de que el analizador YML no los convierta en verdadero o falso.
Las variables de entorno con solo una clave se resuelven en sus valores en la máquina en la que se está ejecutando Compose, lo que puede ser útil para valores secretos o específicos del host.
environment: RACK_ENV: development SHOW: 'true' SESSION_SECRET: environment: - RACK_ENV=development - SHOW=true - SESSION_SECRET
Pregunta
¿Por qué no está permitido?
fuente
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
Respuestas:
Esto proviene de una elección de diseño del lenguaje YAML sobre booleanos
Cada valor sin comillas que coincida con esta "expresión regular":
Se convertirá a
True
oFalse
.Esto comienza a causar un problema cuando su código probará que un valor de entorno sea sí o no, por ejemplo, tomando este script (otros ejemplos en la advertencia PR ):
Y configurando en su archivo de redacción
Resultará en
SOME_VAR
serTrue
cuando se ejecuta el script, por lo tanto, tomar el caso incorrecto ya que no es igual ayes
.Así que la elección se ha hecho para no permitir booleano para evitar comportamientos no deseados difíciles de depurar cuando no estás consciente de la regla YAML.
Veo dos formas de superar el problema:
Usando un
env_file
en su lugar, no se analizan IIRC y deben evitar la conversión.Como ya dijo, use un script de envoltura alrededor de su iniciador para definir el valor en su lugar antes de iniciar la aplicación, algo similar debería hacer:
fuente
Eso es YAML. Se interpreta
true
como un booleano. Los Envars deben ser cadenas, de ahí el requisito de hacer explícito el tipo mediante comillas.Pruebe esto con https://www.json2yaml.com/
fuente