Gostaria de criar um arquivo usando heredoc e depois executar um comando na mesma instrução RUN em um Dockerfile.
Para ilustrar, pegue este Dockerfile
FROM alpine
RUN export FOO=bar && \
cat <<EOF > testfile
Hello, World!
EOF \
&& echo $FOO
Quando tento construir isso, falha com ERROR: failed to solve: unterminated heredoc
.
Parece que o EOF
tem que estar em uma linha por si só. Mas se eu fizer isso, a declaração RUN termina e eu tenho que colocar o próximo comando em uma nova declaração RUN.
Gostaria de ter alguns comandos seguindo o heredoc na mesma instrução RUN para minimizar camadas e ter a variável de ambiente disponível.
Isso é possível?
Você pode aninhar heredocs dentro de heredocs. Por exemplo:
Isso aproveita o caso de uso inicial para heredocs no docker -- para executar uma sequência de comandos em uma
RUN
instrução sem ter que vinculá-los usando&&
and\
. O primeiro heredoc éCMD_EOF
aquele que contém todos os comandos que você quer executar. O segundo,FILE_EOF
, é aquele que contém o conteúdo do arquivo que você quer criar.