2023年03月20日
RUN ... && \ から ヒアドキュメントに移行したら、めっちゃハマった 一応以下見てほしい
検証用Dockerfile(GitHub)
# syntax = docker/dockerfile:1
FROM debian:bullseye-slim
# No Error And Continue
RUN <<EOF
apt-get install -y notexist
echo "heredoc" >> /tmp/test
EOF
# Error And Stop
RUN apt-get install -y notexist \
&& echo "run" >> /tmp/test
RUN echo "Hello World" >> /tmp/test
最初はヒアドキュメント、次が通常のRUNが実行される 実行すると以下になる
...
=> [2/4] RUN <<EOF (apt-get install -y notexist...)
=> ERROR [3/4] RUN apt-get install -y notexist && echo "run" >> /tmp/test
------
> [3/4] RUN apt-get install -y notexist && echo "run" >> /tmp/test:
#10 0.371 Reading package lists...
#10 0.424 Building dependency tree...
#10 0.425 Reading state information...
#10 0.432 E: Unable to locate package notexist
------
executor failed running [/bin/sh -c apt-get install -y notexist && echo "run" >> /tmp/test]: exit code: 100
なお コンテナの中は以下になっている
root@0ee00222ebeb:~# cat /tmp/hoge
hoge
エラーから見てわかるように、失敗したが次のRUNが実行されてしまっている
これでは失敗したかわからない
RUN <<EOF (apt-get install -y notexist...)
おそらくRUNの最後のコマンドの終了ステータスが成功していれば、成功なのだろう
また、ヒアドキュメントを使うことによって、ミスを生む原因になるので、使わない方が良さそう