为什么不允许在docker-compose.yml中使用布尔值?


24

在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

试图解决问题

  1. 如果将true更改为True,则问题仍然存在。
  2. 使用'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

  3. 使用yesno作为变量会导致:

    包含true,这是无效的类型,应为字符串,数字或null

  4. 使用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否,需要用引号引起来,以确保YML解析器不会将其转换为True或False。

仅具有键的环境变量在运行Compose的计算机上解析为它们的值,这对于秘密或特定于主机的值很有用。

environment:
  RACK_ENV: development
  SHOW: 'true'
  SESSION_SECRET:

environment:
  - RACK_ENV=development
  - SHOW=true
  - SESSION_SECRET

为什么不允许呢?


4
与DevOps无关?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
030

1
@ Aurora0001问题已更新
030

Answers:


18

这来自有关布尔值的YAML语言的设计选择

与该“ regex”匹配的每个未报价的值:

 y|Y|yes|Yes|YES|n|N|no|No|NO
|true|True|TRUE|false|False|FALSE
|on|On|ON|off|Off|OFF

将转换为TrueFalse

当您的代码将环境值测试为yes或no时(例如,采用此脚本)(PR讨论中的其他示例)这开始引起问题:

if [ "$SOME_VAR" == "yes" ];
then
  echo "Variable SOME_VAR is activated"
else
  echo "Variable SOME_VAR is NOT activated"
fi

并在您的撰写文件中进行设置

environment:
  SOME_VAR: yes

会导致SOME_VARTrue当脚本运行,因此采取了错误的情况下,因为它不等于yes

所以在选择已经作出,以禁止布尔,以防止不必要的行为难以调试,当你不知道YAML规则。

我看到解决问题的两种方法:

  1. 使用env_file相反,他们并不解析IIRC并应防止转换。

  2. 就像您已经说过的那样,请在启动器周围使用包装器脚本来定义值,而不是在启动应用程序之前,应该执行以下操作:

    AUTOAPPLY=false
    if [ "$SOME_VAR" == "true" ]
    then
        AUTOAPPLY=true
    fi
    
    ./target/universal/stage/bin/APPNAME -Dplay.evolutions.db.default.autoApply=$AUTOAPPLY
    

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.