【问题标题】:Embed heredoc in docker-compose yaml file在 docker-compose yaml 文件中嵌入 heredoc
【发布时间】:2020-01-06 15:00:29
【问题描述】:

我想在 docker-compose yaml 文件中嵌入一个 HEREDOC。

version: "3.7"

services:
  test-cli:
    image: ubuntu
    entrypoint: |
      /bin/sh << HERE
      echo hello
      echo goodbye
      HERE

当我尝试运行它时,我收到以下错误。

 docker-compose -f heredoc.yml run --rm test-cli
Creating network "dspace-compose-v2_default" with the default driver
/bin/sh: 0: Can't open <<

【问题讨论】:

    标签: docker-compose yaml heredoc


    【解决方案1】:

    docs 相反,似乎赋予入口点的参数并未传递给“/bin/sh -c”,而是被解析并转换为参数数组 (argv)。

    事实上,如果您在提供的示例中运行docker inspect,您可以看到您的命令行已转换为数组:

             "Entrypoint": [
                "/bin/sh",
                "<<",
                "HERE",
                "echo",
                "hello",
                "echo",
                "goodbye",
                "HERE"
            ],
    

    由于参数数组不是由 shell 解释的,因此您不能使用管道和 HEREDOC 之类的东西。

    您可以使用 YAML 提供的功能来处理多行输入并提供参数数组:

    version: "3.7"
    
    services:
      test-cli:
        image: ubuntu
        entrypoint:
          - /bin/bash
          - '-c'
          - |
              echo hello
              echo goodbye
    

    如果你真的需要 HEREDOC,你可以这样做:

    version: "3.7"
    
    services:
      test-cli:
        image: ubuntu
        entrypoint:
          - /bin/bash
          - '-c'
          - |
            /bin/sh << HERE
            echo hello
            echo goodbye
            HERE
    

    【讨论】:

      猜你喜欢
      • 2022-06-17
      • 1970-01-01
      • 2022-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-09
      相关资源
      最近更新 更多