结论:运行时机不太一样。

RUN是在Build时运行的,先于CMD和ENTRYPOINT。Build完成了,RUN也运行完成,在运行阶段运行CMD或者ENTRYPOINT。

ENTRYPOINT和CMD的不同点在于执行docker run时参数传递方式,CMD指定的命令可以被docker run传递的命令覆盖,例如,如果用CMD指定:

...
CMD ["echo"]

然后运行

docker run CONTAINER_NAME echo foo

那么CMD里指定的echo会被新指定的echo覆盖,所以最终相当于运行echo foo,所以最终打印出的结果就是:

foo

而ENTRYPOINT会把容器名后面的所有内容都当成参数传递给其指定的命令(不会对命令覆盖),比如:

...
ENTRYPOINT ["echo"]

然后运行

docker run CONTAINER_NAME echo foo

则CONTAINER_NAME后面的echo foo都作为参数传递给ENTRYPOING里指定的echo命令了,所以相当于执行了

echo "echo foo"

最终打印出的结果就是:

echo foo

另外,在Dockerfile中,ENTRYPOINT指定的参数比运行docker run时指定的参数更靠前,比如:

...
ENTRYPOINT ["echo", "foo"]

执行

docker run CONTAINER_NAME bar

相当于执行了:

echo foo bar

打印出的结果就是:

foo bar

Dockerfile中只能指定一个ENTRYPOINT,如果指定了很多,只有最后一个有效。

执行docker run命令时,也可以添加–entrypoint参数,会把指定的参数继续传递给ENTRYPOINT,例如:

...
ENTRYPOINT ["echo","foo"]

然后执行:

docker run --entrypoint=echo CONTAINER_NAME bar #注意没有echo

那么,就相当于执行了echo bar,最终结果就是

bar

Dockerfile 里指定执行命令用RUN 、ENTRYPOING和用CMD有何不同?相关推荐

  1. linux脚本里调执行命令,使用shell的-n/-x/-x执行选项调试Shell脚本

    我们在前面介绍的调试手段是通过修改shell脚本的源代码,从其输出相关的调试信息来定位错误的,那有没有不修改源代码来调试shell脚本的方法呢?有的,那就是使用shell的执行选项,下面将介绍一些常用 ...

  2. vue项目执行命令npm run serve运行项目时 停在 98% after emitting CopyPlugin

    问题描述 启动vue项目执行命令:npm run serve.控制台一直停留在'98% after emitting CopyPlugin' 问题解决 对问题进行排查后发现是项目中使用require( ...

  3. python调用cmd执行命令_详解python调用cmd命令三种方法

    目前我使用到的python中执行cmd的方式有三种 使用os.system("cmd") 该方法在调用完shell脚本后,返回一个16位的二进制数,低位为杀死所调用脚本的信号号码, ...

  4. 【Docker】Dockerfile构建镜像与命令详解

    前言 传统方式部署集群,你需要在每台机器搭建环境,配置各种中间件,这样不但效率低下,而且很难保证环境的一致性,而且配置如果有改动,需要挨个机器修改. 有了Docker,上述问题都能解决.但是官方镜像大 ...

  5. Windows中的命令行提示符里的Start命令执行路径包含空格时的问题

    转自:http://www.x2009.net/articles/windows-command-line-prompt-start-path-space.html 当使用Windows 中的命令行提 ...

  6. python、中循环功能可通过什么命令实现_python定时执行指定函数的方法 Python如何定时循环执行命令?...

    python中如何定时执行某一个函数 = =怎么连接..先调用注册函数 然后调用登录函数就行.顺序执行.至于如果你说注册失败不进行登录的话 直接在注册函数里面处理 注册失败 return def si ...

  7. CMD执行命令出现NOMALY: meaningless REX prefix used以及IDEA提示Cannot run git问题解决

    朋友们好啊, 我是CSDN可能是最菜的博主X,刚才有个朋友问我X老师发生甚么事了 我说怎么回事?给我发了一张截图,我一看!哦,原来是两个报错 一个报NOMALY: meaningless REX pr ...

  8. java远程执行命令报错java.io.IOException: Cannot run program “ifconfig“: error=2, No such file or directory

    直接执行ifconfig没问题,但是在java代码里远程执行ifconfig就找不到命令. session = conn.openSession(); session.execCommand(cmd) ...

  9. expect脚本同步文件、 expect脚本指定host和要同步的文件 、 构建文件分发系统 、批量远程执行命令...

    为什么80%的码农都做不了架构师?>>>    20.31 expect脚本同步文件 使用expect脚本同步文件 说明:核心命令是rsync #! /usr/bin/expect ...

最新文章

  1. SBIO | 许金荣/江聪团队报道禾谷镰刀菌MAPKs介导的生长发育、逆境响应及生物互作机制...
  2. 背水一战 Windows 10 (30) - 控件(文本类): AutoSuggestBox
  3. Java Signal实例
  4. java 如何让循环结束,跳过某个条件,跳出当前的多重嵌套循环
  5. 中无法打开源文件_Safari浏览器无法打开,如何解决Safari在Big Sur中崩溃的情况...
  6. 八 理解各种不同含义的new和delete
  7. java反编译工具--jd-gui
  8. win10下安装STEP7
  9. 如何卸载office201032位_office2010卸载不了应该如何通过清理注册表解决方法?
  10. Cry with DX11
  11. Python爬虫实战 | (6) 爬取猫眼电影《海王》影评
  12. 转载:中国经济酷似日泡沫时代:股市上涨和楼价疯涨
  13. 新西兰皇后镇-我眼中的西施
  14. GUI GUIDER 应用笔记
  15. 小白自总结【遥感图像目视解译】ArcGIS下 1/6北京区域 五类地物
  16. SSL数字证书是什么?
  17. 接口测试平台-93: 全局域名库表+存储
  18. Motrix—完美替代迅雷的全能下载器
  19. python平衡二叉排序树
  20. 微信公众号接入智能聊(ga)天(liao)机器人

热门文章

  1. 西湖大学鞠峰:环境微生物宏基因组学(报告视频+PPT,11月23日)
  2. Nature综述:肠道微生物在人类代谢健康与疾病中的作用
  3. NBT:MaPS-seq测序方法揭示肠道微生物空间分布
  4. 哈佛牙学院博士后:教你口腔保健基本功之牙线篇
  5. 科研经验1:云笔记积累个人知识体系
  6. R语言使用yardstick包的conf_mat函数计算多分类(Multiclass)模型的混淆矩阵、并使用summary函数基于混淆矩阵输出分类模型评估的其它详细指标(kappa、npv等13个)
  7. R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(不同分组配置不同的箱体填充色+Brewer调色板)实战
  8. pandas计算滑动窗口中的最小值实战(Rolling Minimum in a Pandas Column):计算单数据列滑动窗口中的最小值、计算多数据列滑动窗口中的最小值
  9. 使用Oracle instantClient代替Oracle Client安装
  10. R语言nchar函数统计字符串中字符个数实战