将heredoc嵌入到docker-compose yaml文件中



我想在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 <<

与文档相反,似乎提供给入口点的参数没有传递给'/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

相关内容

  • 没有找到相关文章

最新更新