我想将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 <<
答案 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