为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

在Dockerfile中CMD和Enrypoint之间有什么区别?在Dockerfiles中,有两个命令看起来类似于我:CMD和ENTRYPOINT..但我想有一种(微妙的?)它们之间的区别-否则,对于同一件事情有两个命令是没有任何意义的。文件规定CMDCMD的主要目的是为正在执行的容器提供默认值。而为了ENTRYPOINT:入口点帮助您配置可以作为可执行文件运行的容器。那么,这两个命令有什么区别呢?
查看完整描述

3 回答

?
POPMUISE

TA贡献1765条经验 获得超5个赞

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><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.


查看完整回答
反对 回复 2019-06-18
  • 3 回答
  • 0 关注
  • 777 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信