CMDとENTRYPOINTに関するドキュメントを読みました
https://docs.docker.com/engine/reference/builder/#entrypoint
ここでは、表に「NO CMD および NO ENTRYRPOINT は許可されません」と記載されていますが、CMD と ENTRYPOINT なしで Dockerfile を作成し、イメージは正常に構築されました。ここから alpine tar をダウンロードしてください。アルパインタール
Dockerファイル
from scratch
ADD alpine-minirootfs-3.11.2-x86_64.tar.gz /
COPY . /
イメージの構築:
docker build -t test:1 .
Sending build context to Docker daemon 2.724MB
Step 1/3 : from scratch
-----
Successfully tagged test:1
docker run -ti test:1 /bin/sh
/ #
うまくいきました!! では、なぜドキュメントには CMD または ENTRYPOINT のいずれかが必要であると記載されているのでしょうか?
ベストアンサー1
コマンドラインの最後にコマンドを指定すると、docker run
が提供 (または上書き) されますCMD
。同様に、docker run --entrypoint
オプションも が提供 (または上書き) されますENTRYPOINT
。あなたの例では、コンテナが実行すべきことが存在するようにコマンドを指定しました/bin/sh
。コマンドを省略すると、エラーが発生します。
スタイル上、Dockerfiles では、CMD
すでにアプリケーションを自動的に実行しているベースイメージ ( nginx
、 ) を拡張しない限り、ほぼ常に を宣言する必要があります。これにより、より具体的なコマンドライン呼び出しを覚えていなくても、イメージを取得して、その中に埋め込まれたアプリケーションを起動できるようtomcat
になります。docker run