【问题标题】:How can I pass a multi-line variable to a docker container?如何将多行变量传递给 docker 容器?
【发布时间】:2017-02-19 04:53:02
【问题描述】:

根据this comment,docker compose支持多行变量:

environment:
  KEY: |-
    line1
    line2

但是,当我在容器中执行echo $KEY 时,它已将换行符替换为空格:

line1 line2

我错过了什么吗?我的 docker 版本是 1.12.1。

【问题讨论】:

  • 如果您不在环境变量上使用双引号,echo 在 Linux/Unix 下总是这样做。这就是为什么您应该始终在它们周围使用引号(U&L 网站上有很多与此相关的帖子,这与使用 YAML 无关:带有键 KEY 的映射条目的值肯定有换行符)

标签: docker yaml docker-compose


【解决方案1】:

几天前遇到了同样的问题并通过以下方式解决了:

KEY: "line1\nline2"

希望对您的情况也有帮助。

【讨论】:

  • 不幸的是,没有。结果仍然写在一行上(如上)。
  • 嗯,即使用引号括起来?
  • 是…………等等……不!你真是个天才! :-) 您想将其添加到您的答案中以供将来参考吗?实际上,我上面的语法在使用 echo "$KEY" 时也能正常工作。
  • @giraff hehe .. 不客气 :) 我已经用引号括起来了,或者你是什么意思? :)
【解决方案2】:

YAML 语法是正确的。 shell 命令不是:

echo "$KEY"

用换行符打印字符串。

【讨论】:

    【解决方案3】:

    尝试使用> 如果您需要在 env 变量中包含 json,此解决方案效果很好。有很多方法可以拥有multiline strings in YAML

    version: '2'
    services:
      catalog-api-autoscaling:
        image: company.it/project/catalog-api-autoscaling:latest
        container_name: api-autoscaling
        ports:
          - "8083:8083"
        environment:
            CONFIG_ABC: >
              {
                "database": {
                   "catalog": {
                       "credentials": {
                           "username": "scott",
                           "password": "tiger",
                           "datbase": "catalog",
                           "host": "gn.dmfkd.lan"
                        }
                    }
                }
              }
            CONFIG_DEF: >
              {
                "urlRegex": "/.*",
                "script": {
                  "scriptPath": "example-python-app.py"
                },
                "runtime": "python27",
                "threadsafe": true,
              }
    

    【讨论】:

      猜你喜欢
      • 2021-06-21
      • 1970-01-01
      • 2015-08-10
      • 2015-09-18
      • 2019-04-10
      • 2019-06-29
      • 2022-01-16
      • 2021-06-07
      • 1970-01-01
      相关资源
      最近更新 更多