Dockerfile中的CMD和ENTRYPOINT有什么区别?

Dockerfile中的CMD和ENTRYPOINT有什么区别?,第1张

Dockerfile中的CMD和ENTRYPOINT有什么区别?

Docker有一个默认入口点,

/bin/sh -c
但没有默认命令

当您像这样运行docker时:

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
。由于ubuntu
Dockerfile
指定了默认CMD
,因此您仍将在容器中启动bash shell :
CMD ["bash"]

当所有内容都传递到入口点时,您的图像会表现出很好的行为。@Jiri示例很好,它显示了如何将图像用作“二进制”。当

["/bin/cat"]
用作入口点然后执行 *** 作时
dockerrun img /etc/passwd
,您会得到它,它
/etc/passwd
是命令并传递给入口点,因此最终结果的执行很简单
/bin/cat/etc/passwd

另一个示例是将任何cli作为入口点。例如,如果您有一个redis映像,而不是运行

docker run redisimg redis -Hsomething -u toto get key
,则可以简单地拥有
ENTRYPOINT ["redis", "-H", "something","-u", "toto"]
,然后像这样运行以获得相同的结果:
docker run redisimg get key



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/4901065.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-11-12
下一篇2022-11-12

发表评论

登录后才能评论

评论列表(0条)

    保存