クラウドとコンテナの基礎
FROM alpine
ENTRYPOINT ["ping", "-c", "3"]
CMD ["localhost"]上のDockerfileから作ったイメージ pinger を、docker run pinger example.com として起動した。コンテナの中で実行されるコマンドとして、正しいものはどれか。
- Aping -c 3 localhost
- Bping -c 3 example.com
- Cexample.com(コマンドとして実行しようとしてエラーになる)
答えと解説を見る
正解:B. ping -c 3 example.com
exec形式(JSONの配列)で書いた ENTRYPOINT は、コンテナで必ず実行するコマンドで、CMD はその既定の引数になります。docker run でイメージ名の後ろに書いた引数は CMD を置き換え、ENTRYPOINT の後ろに付け加えられるので、ping -c 3 example.com が実行されます。引数を付けずに docker run pinger とすれば、CMD の localhost が使われて ping -c 3 localhost になります。ENTRYPOINT そのものを変えたいときは、docker run の --entrypoint オプションを使います。
- A. 引数を付けずに起動した場合の動作です。docker run の引数は CMD を置き換えます。
- B. 正しい。引数の example.com が CMD の localhost に置き換わり、ENTRYPOINT の後ろに付きます。
- C. ENTRYPOINT がなく CMD だけのイメージなら、引数がコマンド全体を置き換えてこうなります。ここでは ENTRYPOINT があるので、引数として渡されます。