将Heredoc嵌入docker-compose yaml文件

时间:2019-09-03 17:16:35

标签: docker-compose yaml heredoc

我想将HEREDOC嵌入docker-compose yaml文件中。

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

1 个答案:

答案 0 :(得分: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