首页 > 解决方案 > Dockerfile 中是否需要提及 CMD 或 ENTRYPOINT?

问题描述

我已阅读有关 CMD 和 ENTRYPOINT 的文档

https://docs.docker.com/engine/reference/builder/#entrypoint

在这里,他们在表中提到“不允许使用 NO CMD 和 NO ENTYRPOINT”,但是我创建了一个没有 CMD 和 ENTRYPOINT 的 Dockerfile,并且成功构建了映像。从这里下载高山焦油Alpine Tar

Dockerfile

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 是必要的?

标签: dockerdockerfile

解决方案


docker run在命令行供应(或覆盖)的末尾指定一个命令CMD;同样,docker run --entrypoint选项提供(或覆盖)ENTRYPOINT。在您的示例中,您给出了一个命令/bin/sh,因此容器可以做一些事情;如果你把它关掉,你会得到一个错误。

作为风格问题,您的 Dockerfile 几乎总是应该声明 a CMD,除非您正在扩展已经自动运行应用程序的基本映像(nginx, tomcat)。这将让您docker run生成图像并启动嵌入其中的应用程序,而无需记住更具体的命令行调用。


推荐阅读