Dockerfile里指定执行命令用ENTRYPOING和用CMD有何不同

 我来答
笑喘是病得抽
2017-07-20 · TA获得超过925个赞
知道大有可为答主
回答量:2140
采纳率:98%
帮助的人:2240万
展开全部
运行时机不太一样。RUN是在Build时运行的,先于CMD和ENTRYPOINT。Build完成了,RUN也运行完成后,再运行CMD或者ENTRYPOINT。ENTRYPOINT和CMD的不同点在于执行dockerrun时参数传递方式,CMD指定的命令可以被dockerrun传递的命令覆盖,例如,如果用CMD指定:CMD["echo"]然后运行dockerrunCONTAINER_NAMEechofoo那么CMD里指定的echo会被新指定的echo覆盖,所以最终相当于运行echofoo,所以最终打印出的结果就是:foo而ENTRYPOINT会把容器名后面的所有内容都当成参数传递给其指定的命令(不会对命令覆盖),比如:ENTRYPOINT["echo"]然后运行dockerrunCONTAINER_NAMEechofoo则CONTAINER_NAME后面的echofoo都作为参数传递给ENTRYPOING里指定的echo命令了,所以相当于执行了echo"echofoo"最终打印出的结果就是:echofoo另外,在Dockerfile中,ENTRYPOINT指定的参数比运行dockerrun时指定的参数更靠前,比如:ENTRYPOINT["echo","foo"]执行dockerrunCONTAINER_NAMEbar相当于执行了:echofoobar打印出的结果就是:foobarDockerfile中只能指定一个ENTRYPOINT,如果指定了很多,只有最后一个有效。执行dockerrun命令时,也可以添加-entrypoint参数,会把指定的参数继续传递给ENTRYPOINT,例如:ENTRYPOINT["echo","foo"]然后执行:dockerrunCONTAINER_NAMEbar#注意没有echo那么,就相当于执行了echofoobar,最终结果就是foobar
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式