LoginSignup
237
207

More than 3 years have passed since last update.

dockerのENTRYPOINTとCMDの書き方と使い分け、さらに併用

Last updated at Posted at 2014-03-04

2019-06-01 追記

この記事より DockerfileのCMDとENTRYPOINTを改めて解説する - Qiita のほうがお勧めです。

元記事

Dockerfile referenceDockerfile Best PracticesにENTRYPOINTとCMDの書き方と使い分け、さらに併用について書かれていました。

ENTRYPOINTとCMDの引数の書式

ENTRYPOINTの書式は以下の2種類があります。

  • ENTRYPOINT ["executable", "param1", "param2"] (シェルを介さずに実行。この形式を推奨)
  • ENTRYPOINT command param1 param2 (シェルを介して実行)

シェルを介して実行するほうは/bin/sh -cを使って実行するそうです。

CMDの書式は以下の3種類です。

  • CMD ["executable","param1","param2"] (シェルを介さずに実行。この形式を推奨)
  • CMD ["param1","param2"] (ENTRYPOINTのデフォルト引数として利用する場合)
  • CMD command param1 param2 (シェルを介して実行)

ENTRYPOINTとCMDの併用

Dockerfile Best Practicesの"5. CMD and ENTRYPOINT better together"にENTRYPOINTとCMDを併用する例があります。

ENTRYPOINT ["/usr/bin/rethinkdb"]

CMD ["--help"]

のように書きます。

すると、docker runのときに

docker run crosbymichael/rethinkdb

のようにイメージの後に引数無しで実行した場合は、CMDの--helpが使われて、/usr/bin/rethinkdb --helpが実行されることになります。

一方、

docker run crosbymichael/rethinkdb --bind all

のようにイメージの後に引数有りで実行した場合は、CMDの値は使われず、/usr/bin/rethinkdb --bind allが実行されることになります。

docker run --entrypoint="" で変更も可能

docker runのリファレンスによると --entrypoint オプションを使えば DockerfileENTRYPOINT の値を上書きすることも可能です。

237
207
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
237
207