前提
dockerfileの CMD
や ENTRYPOINT
でコマンドを定義する方法は2通りある
- exec form(推奨) : JSONの配列で定義する
["echo", "${HOGE}"]
- 直接コマンドが実行される(変数展開が行われない )
- shell form : 文字列で定義する
"echo ${HOGE}"
/bin/sh -c
を介してコマンドが実行される(変数展開が行われる )
なので、CMD
や ENTRYPOINT
で変数展開したい場合、shell form を使用すればよい
exec formで変数展開を行いたい場合
exeform の中で shell を呼び出せば良い
ENTRYPOINT ["/bin/sh", "-c", "echo ${HOGE}"]
参考
- https://docs.docker.com/engine/reference/builder/#cmd
- https://docs.docker.com/engine/reference/builder/#entrypoint
おまけ
以下のように定義すると、HOGE
は出力されず、空文字が出力される
ENTRYPOINT ["/bin/sh", "-c", "echo", "${HOGE}"]
これは、${HOGE}
が、echo
ではなく、/bin/sh
の第二引数に渡るため
(第二引数は特に何もしない)