在Dockerfile中CMD和Enrypoint之间有什么区别?

在Dockerfile中CMD和Enrypoint之间有什么区别?

在Dockerfiles中,有两个命令看起来类似于我:CMDENTRYPOINT..但我想有一种(微妙的?)它们之间的区别-否则,对于同一件事情有两个命令是没有任何意义的。

文件规定CMD

CMD的主要目的是为正在执行的容器提供默认值。

而为了ENTRYPOINT:

入口点帮助您配置可以作为可执行文件运行的容器。

那么,这两个命令有什么区别呢?


红糖糍粑
浏览 778回答 3
3回答

POPMUISE

Docker有一个默认的入口点,即/bin/sh -c但是没有默认命令。当你像这样经营码头时:docker run -i -t ubuntu bash入口点是默认的/bin/sh -c,图像是ubuntu命令是bash.该命令通过入口点运行。也就是说,实际执行的事情是/bin/sh -c bash..这允许Docker实现RUN依赖于shell的解析器。后来,人们要求能够定制这个,所以ENTRYPOINT和--entrypoint介绍了。之后的一切ubuntu在上面的例子中,是命令并传递给入口点。当使用CMD指令,就好像你在做docker run -i -t ubuntu <cmd>.&nbsp;<cmd>将是入口点的参数。如果您输入以下命令,也会得到相同的结果。docker run -i -t ubuntu..您仍将在容器中启动bash shell,因为Ubuntu Dockerfile指定默认的CMD:CMD ["bash"]当一切都传递到入口点时,您可以从图像中得到非常好的行为。@Jiri示例很好,它展示了如何使用图像作为“二进制”。使用时["/bin/cat"]作为切入点然后docker run img /etc/passwd你明白了,/etc/passwd是命令,并被传递到入口点,因此最终结果的执行是简单的/bin/cat /etc/passwd.另一个例子是有任何cli作为入口点。例如,如果您有一个redis映像,而不是运行docker run redisimg redis -H something -u toto get key,你可以简单地ENTRYPOINT ["redis", "-H", "something", "-u", "toto"]然后像这样运行,得到相同的结果:docker run redisimg get key.
打开App,查看更多内容
随时随地看视频慕课网APP