在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参数)启动应用程序:


包含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



问题

为什么不允许?

评论

与DevOps无关? DevOps Stack Exchange是软件工程师的问答网站,他们致力于自动测试,持续交付,服务集成和监视以及构建SDLC基础架构。

@ Aurora0001问题已更新

#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


运行脚本时将导致FalseSOME_VAR,因此采用错误的大小写它不等于True。我看到两种解决问题的方法:


使用yes代替,它们没有被解析为IIRC,应该阻止转换。

您已经说过,请在启动器周围使用包装器脚本来定义ins值在启动应用程序之前进行操作,应该执行以下操作:

environment:
  SOME_VAR: yes




#2 楼

那是YAML。它将true解释为布尔值。 Envar必须是字符串,因此要求通过引号使类型明确。

使用https://www.json2yaml.com/
进行测试

评论


更一般而言,引号不会出现在值本身中,因为它们是YAML格式。

–coderanger
17年3月18日在21:47