概要
- Dockerfileの
SHELL
構文について理解がなかったので、調査時のメモ
出発点
こちらのページで出てきたDockerfileの調査をしていた
SHELL ["/bin/bash", "-oeux", "pipefail", "-c"]
参考
こちらのサイトが非常に参考になりました。ありがとうございます。
https://gist.github.com/mohanpedala/1e2ff5661761d3abd0385e8223e16425
SHELL命令
SHELL 命令は、 シェル 形式で使われるデフォルトのコマンドを上書きできます。 Linux 上でのデフォルトのシェルは ["/bin/sh", "-c"] で、Windows は ["cmd", "/S", "/C"] です。Dockerfile では、 SHELL 命令を JSON 形式で書く必要があります。
- SHELLという構文はDockerfile内で使用される(Dockerfileビルド時に使用される)コマンドラインに対して、上書きができる
- デフォルトではDockerは
["/bin/sh", "-c"]
の設定になっている
SHELL ["/bin/bash", "-oeux", "pipefail", "-c"]
- 意味を紐解く(これはDockerの話ではなく、bashの話)
#!/bin/bash -e false | true echo do not stop # 上記場合にはecho do not stopは実行される #!/bin/bash -e set -o pipefail false | true echo do not stop # 上記場合にはecho do not stopは実行されない