我已经阅读了关于CMD和ENTRYPOINT的文档
https://docs.docker.com/engine/reference/builder/#entrypoint
这里,他们在表中提到“不允许使用CMD和ENTRPOINT”,但我创建了一个没有CMD和ENTRPOINT的Dockerfile,并且成功构建了映像。从这里下载alpine tar 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是必需的呢?
3条答案
按热度按时间ztyzrc3y1#
在
docker run
命令行末尾指定一个命令可以提供(或覆盖)CMD
;类似地,docker run --entrypoint
选项提供(或覆盖)ENTRYPOINT
。在您的示例中,您给出了一个命令/bin/sh
,因此容器需要执行一些操作;如果您关闭它,您将得到一个错误。作为一种风格,你的Dockerfiles应该几乎总是声明一个
CMD
,除非你正在扩展一个已经自动运行应用程序的基础镜像(nginx
,tomcat
)。这将允许您docker run
图像并启动嵌入其中的应用程序,而不必记住更具体的命令行调用。toiithl62#
文件中的以下行不正确。
可能应该写上-
CMD or ENTRYPOINT is necessary for running a container.
pbgvytdp3#
CMD
和ENTRYPOINT
都是Dockerfile指令,用于指定运行Docker容器时将执行的命令。ENTRYPOINT
设置每次容器启动时要执行的主命令,并且不会被命令行参数覆盖。另一方面,CMD
为ENTRYPOINT
提供了默认参数,或者提供了一个默认命令,可以在运行时通过命令行参数轻松覆盖。如果一起使用,CMD
参数将成为ENTRYPOINT
命令的附加参数。即使在基本映像和最终的
Dockerfile
中都没有CMD
或ENTRYPOINT
,您仍然可以通过在末尾指定命令来运行带有docker run
的容器。否则是错误!