Open1

Dockerfile の CMD を文字列で書く場合と配列で書く場合の違いについて

yuyake0084yuyake0084

文字列(Execフォーム)

CMD [ "echo",  "$PATH" ]

配列で書く場合(シェルフォーム)

CMD "echo $PATH"

結論

  • Exec フォームの場合シェルを介在せずに実行される
    • 環境変数を参照されず、ただの文字列として解釈される
  • Docker公式ではExecフォームを推奨している

Execフォームにて環境変数を参照する場合は

CMD [ "sh", "-c", "echo $PATH" ]

参考記事

https://yanor.net/wiki/?Docker/Dockerfile/CMDで指定する配列と文字列の違い