CMD与ENTRYPOINT都可以代表容器的启动命令,单丛语义上来理解,CMD是一个命令或者口令,而ENTRYPOINT则是一个入口(相当于容器启动时的入口),那么其实就可以理解为每当我们开启一个容器都需要带着口令去进入容器的入口。虽然两者可以单独使用,但根据业务需求往往是将两者搭配起来使用更加方便与规范。

先来看一张表

这是在Dockerfile中使用CMD与ENTRYPOINT的几种组合情况,两者可以定义在运行容器时执行了什么命令。

注意事项:

  • CMD与ENTRYPOINT在Dockerfile里应该至少指定一个
  • 当容器作为可执行文件使用时,应该定义ENTRYPOINT
  • CMD应该用作定义ENTRYPOINT命令或在容器中执行特别命令的默认参数的方法
  • 当运行带有替代参数的容器时,CMD将被覆盖

两者单独使用

从表中可以看出两者均可单独当做启动命令使用,但是灵活性并不是很高,比如传参等。

1. 对于CMD来讲,有三种写法:

  • CMD ["executable","p1","p2"] (exec方式, 首选方式)
  • CMD ["p1","p2"] (为ENTRYPOINT提供默认参数,需与ENTRYPOINT结合使用)
  • CMD command p1 p2 (shell形式)

当在Dockerfile中单独使用CMD作为容器启动命令(CMD ["executable","p1","p2"] )时,只允许使用一个CMD,若有多个则以最后一个为主。

此外,CMD作为启动命令,当外部(命令行)传入启动命令时,外部命令会覆盖CMD中的启动命令。

2. 对于ENTRYPOINT来讲,有两种写法:

  • ENTRYPOINT ["executable", "p1", "p2"] (exec方式, 首选方式)
  • ENTRYPOINT command param1 param2 (shell 形式)

当在Dockerfile中单独使用ENTRYPOINT作为容器启动命令时,外部传入的启动命令不会覆盖ENTRYPOINT中的命令。

另外需要注意的是两者通过exec的方式取不出来环境变量,但是通过shell方式可以取出环境变量。

如果既想要使用exec方式又要取环境变量,则可以通过/bin/sh -c的方式(RUN指令也类似)

例如:ENTRYPOINT ["/bin/sh", "-c", "echo ${p1}"] (["/bin/sh", "-c", "指令均写在这里"] = shell形式)

两者结合使用

官方推荐:ENTRYPOINT(提供可执行命令+参数(可选)) + CMD(只提供参数) = 容器的完整命令

如果使用CMD为ENTRYPOINT指令提供默认参数,则CMD和ENTRYPOINT指令均应使用JSON数组格式指定。

在CMD中自定义的参数必须要传完整,容器才可成功启动。

Dockerfile之CMD与Entrypoint使用要点的更多相关文章

  1. Dockerfile中CMD和ENTRYPOINT的区别

    当启动一个容器时,CMD和ENTRYPOINT都可以用来执行启动命令.但它们的具体用法还是有一些区别: 1. Dockerfile必须至少指定CMD或者ENTRYPOINT其中的一个. 2. ENTR ...

  2. docker 15 dockerfile案例-CMD、ENTRYPOINT案例

    CMD.ENTRYPOINT都是指定一个容器启动时要运行的命令.但是CMD会覆盖前面的参数,而ENTRYP会追加组合原来的参数 未完待续...

  3. Dockerfile创建自定义Docker镜像以及CMD与ENTRYPOINT指令的比较

    1.概述 创建Docker镜像的方式有三种 docker commit命令:由容器生成镜像: Dockerfile文件+docker build命令: 从本地文件系统导入:OpenVZ的模板. 关于这 ...

  4. Dockerfile 中的 CMD 与 ENTRYPOINT

    CMD 和 ENTRYPOINT 指令都是用来指定容器启动时运行的命令.单从功能上来看,这两个命令几乎是重复的.单独使用其中的一个就可以实现绝大多数的用例.但是既然 doker 同时提供了它们,为了在 ...

  5. Dockerfile RUN, CMD & ENTRYPOINT

    Dockerfile RUN, CMD & ENTRYPOINT 在使用Dockerfile创建image时, 有几条指令比较容易混淆, RUN, CMD, ENTRYPOINT. RUN是在 ...

  6. FW: Dockerfile RUN, CMD & ENTRYPOINT

    Dockerfile RUN, CMD & ENTRYPOINT     在使用Dockerfile创建image时, 有几条指令比较容易混淆, RUN, CMD, ENTRYPOINT. R ...

  7. Dockerfile 中的 CMD 与 ENTRYPOINT(转)

    add by zhj:  CMD和ENTRYPOINT的差异很小,可以认为完全可以相互代替.两者都支持shell模式和exec模式, shell模式:跟你在shell下执行命令的格式一样,简单方便,但 ...

  8. Docker | dockerfile构建centos镜像,以及CMD和ENTRYPOINT的区别

    构建自己的centos镜像 docker pull centos下载下来的镜像都是基础版本,缺少很多常用的命令功能,比如:ll.vim等等, 下面介绍制作一个功能较全的自己的centos镜像. 步骤 ...

  9. 论docker中 CMD 与 ENTRYPOINT 的区别

    Dockerfile里有 CMD 与 ENTRYPOINT 两个功能咋看起来很相似的指令,开始的时候觉得两个互用没什么所谓,但其实并非如此: CMD指令: The main purpose of a ...

随机推荐

  1. 乘风破浪,遇见最美Windows 11之新微软商店(Microsoft Store)生态 - 安卓(Android™)开发体验指南

    什么是Windows 11的安卓(Android)应用 2021年6月25日,微软召开线上发布会,对外宣告下一代Windows操作系统Windows 11,Windows 11为用户重新打造的Micr ...

  2. 安装pytorch后import torch显示no module named 'torch'

    问题描述:在pycharm终端里通过pip指令安装pytorch,显示成功安装但是python程序和终端都无法使用pytorch,显示no module named 'torch'. 起因:电脑里有多 ...

  3. canvas中的优先级,.after最前,before最底,canvas中间,部件在布局下面

    <RelativeWidget>: # 画布之后 canvas.before: Color: # 白色 rgba:[1,1,1,1] Rectangle: pos:self.pos # 最 ...

  4. UltraSoft - Beta - Scrum Meeting 8

    Date: May 24th, 2020. Scrum 情况汇报 进度情况 组员 负责 今日进度 q2l PM.后端 记录Scrum Meeting Liuzh 前端 暂无 Kkkk 前端 暂无 王f ...

  5. Charles的简单用法

    Charles的简单用法 一.抓电脑上 http 包 二.显示请求的 Request 和 Response 三.抓取电脑上 https 包 1.安装根证书 2.在钥匙串中启用根证书 3.配置哪些需要抓 ...

  6. 带你用AVPlayer实现音频和视频播放

    项目概述 以下项目是基于AVPlayer的实际运用,实现音频播放.横竖屏视频切换播放.类似抖音的竖屏全屏播放效果. 项目地址:AVPlayerAudioVideo 如果文章和项目对你有帮助,还请给个S ...

  7. linux下命令拼接

    前言:我个five,一道特别简单的拼接题没有做出来,我吐了,不过也是涨知识了 直接切入正题了 linux命令是可以拼接的,也就是说在一个system("???")下我们的???可以 ...

  8. poj 1704 Georgia and Bob (nim)

    题意: N个棋子,位置分别是p[1]...p[N]. Georgia和Bob轮流,每人每次可选择其中一个棋子向左移动若干个位置(不能超过前一个棋子,不能超出最左边[位置1]且不能不移) Georgia ...

  9. (一)Mongodb学习之 Centos 7 单机部署

    学习参考:https://www.runoob.com/mongodb/mongodb-tutorial.html 一.部署环境 1.系统:Centos 7 2.mongodb: mongodb-li ...

  10. MacOS修复TNT和谐软件运行崩溃、闪退问题

    因为Apple删除了TNT的证书,因此部分应用程序出现了打开崩溃的情况. 目前的解决方案是自己更改签名. 第一种方法: 在终端中运行以下命令:(注意:name.app就是需要更改签名的程序) sudo ...