我想使用 heredoc 创建一个文件,然后在 Dockerfile 中的同一个 RUN 语句中运行一个命令。
为了说明,请使用以下 Dockerfile
FROM alpine
RUN export FOO=bar && \
cat <<EOF > testfile
Hello, World!
EOF \
&& echo $FOO
当我尝试构建它时,它失败了ERROR: failed to solve: unterminated heredoc
。
似乎必须EOF
单独占一行。但如果我这样做,RUN 语句就会结束,我必须将下一个命令放在新的 RUN 语句中。
我希望在同一个 RUN 语句中遵循 heredoc 有一些命令,以最小化层数并使环境变量可用。
这可能吗?
你可以在 heredoc 中嵌套 heredoc。例如:
这利用了 docker 中 heredocs 的初始用例——在一个语句中运行一系列命令,
RUN
而无需使用&&
and链接它们\
。第一个 heredoc 是CMD_EOF
包含您要运行的所有命令的。第二个,FILE_EOF
是包含您要创建的文件内容的。