dockerfileのCMDやENTRYPOINTでの変数展開について

前提

dockerfileの CMDENTRYPOINT でコマンドを定義する方法は2通りある

  • exec form(推奨) : JSONの配列で定義する ["echo", "${HOGE}"]
    • 直接コマンドが実行される(変数展開が行われない )
  • shell form : 文字列で定義する "echo ${HOGE}"
    • /bin/sh -c を介してコマンドが実行される(変数展開が行われる )

なので、CMDENTRYPOINT で変数展開したい場合、shell form を使用すればよい

exec formで変数展開を行いたい場合

exeform の中で shell を呼び出せば良い

ENTRYPOINT ["/bin/sh", "-c", "echo ${HOGE}"]

参考

おまけ

以下のように定義すると、HOGE は出力されず、空文字が出力される

ENTRYPOINT ["/bin/sh", "-c", "echo", "${HOGE}"]

これは、${HOGE} が、echo ではなく、/bin/sh の第二引数に渡るため

(第二引数は特に何もしない)