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
参数)启动应用程序:包含true,这是无效类型,应为字符串,数字或null
使用
yes
并使用将no
转换为true的脚本讨论
根据文档
yes
:环境
添加环境变量。您可以使用数组或
字典。任何布尔值; true,false,是,否,需要用引号引起来
,以确保YML解析器不会将它们转换为True或False
。在运行Compose的计算机上被解析为它们的值,这对于秘密或主机特定的值可能很有帮助。
environment:
RACK_ENV: development
SHOW: 'true'
SESSION_SECRET:
environment:
- RACK_ENV=development
- SHOW=true
- SESSION_SECRET
问题
为什么不允许?
#1 楼
这来自有关布尔值的YAML语言的设计选择与该“ regex”匹配的每个未引用的值:
或
True
。当您的代码将环境值测试为是或否时,例如使用以下脚本(PR论述中的其他示例),此操作会引发问题: >
y|Y|yes|Yes|YES|n|N|no|No|NO
|true|True|TRUE|false|False|FALSE
|on|On|ON|off|Off|OFF
并在撰写文件中进行设置
if [ "$SOME_VAR" == "yes" ];
then
echo "Variable SOME_VAR is activated"
else
echo "Variable SOME_VAR is NOT activated"
fi
运行脚本时将导致
False
为SOME_VAR
,因此采用错误的大小写它不等于True
。我看到两种解决问题的方法:使用
yes
代替,它们没有被解析为IIRC,应该阻止转换。您已经说过,请在启动器周围使用包装器脚本来定义ins值在启动应用程序之前进行操作,应该执行以下操作:
environment:
SOME_VAR: yes
#2 楼
那是YAML。它将true
解释为布尔值。 Envar必须是字符串,因此要求通过引号使类型明确。使用https://www.json2yaml.com/
进行测试
评论
更一般而言,引号不会出现在值本身中,因为它们是YAML格式。
–coderanger
17年3月18日在21:47
评论
与DevOps无关? DevOps Stack Exchange是软件工程师的问答网站,他们致力于自动测试,持续交付,服务集成和监视以及构建SDLC基础架构。@ Aurora0001问题已更新