Dockerfile の ENTRYPOINT ディレクティブと CMD ディレクティブは、コンテナーのデフォルトの起動コマンドを定義します。ただし、これらのディレクティブは、コンテナーの実行時に Docker run コマンド ライン引数によってオーバーライドされる可能性があります。
オーバーライドの優先順位関係は次のとおりです。
- コンテナーの実行時に
--entrypoint
このオプション、Dockerfile で指定された ENTRYPOINT コマンドがオーバーライドされます。 - コンテナーの実行時にコマンドライン引数を指定すると、Dockerfile で指定された CMD コマンドがオーバーライドされます。
- Dockerfile で ENTRYPOINT コマンドが指定されているが、CMD コマンドでは指定されていない場合、コンテナーの実行時にコマンド ライン引数が CMD コマンドになります。
- Dockerfile で ENTRYPOINT コマンドも CMD コマンドも指定されていない場合、コンテナーの実行時に、コマンド ライン パラメーターは完全なコマンドとみなされ、直接実行されます。
たとえば、次の Dockerfile があるとします。
FROM ubuntu
ENTRYPOINT ["/bin/echo", "Hello,"]
CMD ["world!"]
Dockerfile は、 ENTRYPOINT コマンドと CMD コマンドを"/bin/echo"
使用して、Ubuntu に基づいたコンテナーを定義します。"Hello,"
"world!"
パラメーターを指定せずにコンテナーを実行すると、デフォルトの ENTRYPOINT および CMD コマンドが実行され、次の出力が表示されます。
$ docker run myimage
Hello, world!
コンテナーの実行時にコマンド ライン引数が指定されている場合、CMD コマンドはオーバーライドされます。次に例を示します。
$ docker run myimage "GPT-3"
出力は次のようになります。
Hello, GPT-3!
コンテナーの実行時に--entrypoint
オプションを、ENTRYPOINT コマンドがオーバーライドされます。次に例を示します。
$ docker run --entrypoint /bin/ls myimage /
出力はコンテナのルートにあるファイルのリストになります。
ENTRYPOINT と CMD コマンドの両方が Dockerfile で指定されている場合、CMD コマンドはコンテナーの実行時にコマンド ライン パラメーターによってオーバーライドできますが、 ENTRYPOINT コマンドは、--entrypoint
オプション