Определение логического значения в файле docker-compose.yml:
environment:
SOME_VAR: true
и docker up
результаты работы в:
contains true, which is an invalid type, it should be a string, number, or a null
Попытки решить проблему
- Если true изменено на True, проблема не устранена.
Использование
'true'
не принимаются сам код ( рамочные игр приложение запускается при помощи./target/universal/stage/bin/APPNAME -Dplay.evolutions.db.default.autoApply=
, то есть либо-Dplay.evolutions.db.default.autoApply=true
или-Dplay.evolutions.db.default.autoApply=false
параметр):VAR имеет тип STRING, а не BOOLEAN
Использование
yes
илиno
в качестве переменной приводит к:содержит true, который является недопустимым типом, он должен быть строкой, числом или нулем
Использование
yes
и использование сценария, который превращаетсяyes
в настоящие произведения
обсуждение
По документам 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
:
Окружающая обстановка
Добавьте переменные среды. Вы можете использовать либо массив, либо словарь. Любые логические значения; true, false, yes no, должны быть заключены в кавычки, чтобы они не были преобразованы в True или False синтаксическим анализатором YML.
Переменные среды, имеющие только ключ, преобразуются в их значения на компьютере, на котором работает Compose, что может быть полезно для секретных или специфичных для хоста значений.
environment: RACK_ENV: development SHOW: 'true' SESSION_SECRET: environment: - RACK_ENV=development - SHOW=true - SESSION_SECRET
Вопрос
Почему это не разрешено?
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
Ответы:
Это происходит от выбора дизайна языка YAML о булевых
Каждое значение без кавычек, соответствующее этому "регулярному выражению":
Будет преобразован в
True
илиFalse
.Это начало вызывать проблему, когда ваш код будет проверять значение среды на «да» или «нет», например, взяв этот сценарий (другие примеры в разделе PR ):
И настройки в вашем файле
Это приведет к
SOME_VAR
тому,True
что сценарий будет запущен, и поэтому будет принят неправильный регистр, так как он не равенyes
.Таким образом, выбор был сделан , чтобы запретить булево , чтобы предотвратить нежелательное поведение трудно отлаживать , когда вы не знаете правила YAML.
Я вижу два способа преодолеть проблему:
Используя
env_file
вместо этого, они не анализируются IIRC и должны препятствовать преобразованию.Как вы уже сказали, используйте сценарий-обертку вокруг панели запуска, чтобы определить значение перед запуском приложения, что-то вроде этого должно сделать:
источник
Это ЯМЛ. Это интерпретирует
true
как логическое значение. Envars должны быть строками, поэтому необходимо сделать тип явным через кавычки.Проверьте это с https://www.json2yaml.com/
источник