【问题标题】:How to correctly multiline a Yaml List如何正确地多行 Yaml 列表
【发布时间】:2022-01-19 14:17:48
【问题描述】:

我正在尝试在我的 docker-compose.yaml 文件中将公钥设置为环境变量。

我知道我们可以使用两种不同的语法(不能同时使用两种语法):
一种是YAML 映射,它使用语法key: value:

environment:  
  key: value
  key2: value2
  // And this is how we Muliline
  publicKey: |-
    -----BEGIN PUBLIC KEY-----
    UAdhusaudu89Ajdsdoskdosadk*(Sd98798da
    kaosdkOKdoksaoKDOaksdo98d7868sadajidas

我们还有YAML list语法,它使用语法var = value

environment:
  key=value

但是我怎样才能成功地使用 YAML 列表语法进行多行处理?
我也需要获得 换行符 (\n)

当我尝试读取环境变量时,我得到一个字符串,而不是 换行符 (/n) 我得到一个空格。

我明白了:

-----BEGIN PUBLIC KEY----- KOSKODKSOAKD DOKSODKSAOD...

我真正需要的:
-----BEGIN PUBLIC KEY-----\nKOSKODKSOAKD\nDOKSODKSAOD...(注意 /n)。

为什么我需要这个?
没有它,公钥验证/验证将失败。
现在我有一个函数可以遍历字符串并手动添加换行符,但它并不漂亮,如果我可以从 docker-compose 文件中让它工作会更好。

【问题讨论】:

    标签: node.js docker docker-compose jwt


    【解决方案1】:

    这个:

    环境: 键=值

    是一个带有一个键 environment 的映射,其值为 key=value。没有进一步解析,= 在 YAML 中没有特殊含义(当然您的应用程序可以进一步解释这样的标量)

    如果您想在块样式 YAML 中使用列表语法,则需要使用块序列条目指示符,后跟空格 (- ):

    environment:
      - key=value
    

    同样key=value 是 YAML 的单个标量。

    要设置环境变量DEBUGdocker-compose documentation 使用:

    web:
      environment:
        - DEBUG=1
    

    环境变量名DEBUG及其值(1)的拆分由docker-compose完成。如果您希望环境变量具有换行符,则需要完整的序列元素是多行标量,您可以通过以下方式完成:

    environment:
        - key=value
        - key2=value2
        - |-
          publicKey=-----BEGIN PUBLIC KEY-----
          UAdhusaudu89Ajdsdoskdosadk*(Sd98798da
          kaosdkOKdoksaoKDOaksdo98d7868sadajidas
    

    【讨论】:

    • 我的错误是尝试在= 之后使用管道|,就像我在: 之后使用的一样。呸呸呸。谢谢!
    • 当你这样做时,YAML 只会认为它是一个多行不带引号的标量,而不是解释 =|。这样的标量会在加载的数据中将所有连续的空白(包括换行符)转换为单个空格。
    【解决方案2】:

    您可以在这里获得帮助:

    How do I break a string in YAML over multiple lines?

    如果您不想在末尾附加换行符,请使用 >- 或 |-。

    【讨论】:

    • >-|- 仅在不幸使用 Mapping syntax 时有效。而且我无法更改文件。
    猜你喜欢
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 2020-06-30
    • 2020-03-09
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多