Dockerfile 中 ENTRYPOINT 与 CMD 的区别

https://it.baiked.com/system/docker/1975.html

简单区别

Dockerfile 有两个启动配置, CMD 和 ENTRYPOINT , 可以在 Dockerfile 中来配置容器启动时自动执行的命令, 但是这二者有什么区别呢, 接下来总结如下:

首先来看一下 CMD , 有三种格式的配置, 分别是:

  • CMD [“executable”,”param1”,”param2”] (exec 格式, 推荐的格式)
  • CMD [“param1”,”param2”] (作为 ENTRYPOINT 的默认参数)
  • CMD command param1 param2 (shell 格式)

在使用时, 要注意一下问题:

  1. 包含可执行文件时, 为容器指定默认执行命令, 这个是主要用途;
  2. 不包含可执行文件时, 必须提供 ENTRYPOINT 配置, CMD 作为默认参数;
  3. Dockerfile 中只能有一个 CMD 起效, 如果出现了多个, 则最后一个起效;

而 ENTRYPOINT , 有两种格式的配置, 分别是:

  • ENTRYPOINT [“executable”, “param1”, “param2”] (exec 格式, 推荐)
  • ENTRYPOINT command param1 param2 (shell 格式)

CMD 和 ENTRYPOINT 两种配置格式的区别是:

  • exec 格式 推荐这种格式, 使用这种模式时, 可以不需要 shell 进程, 让 Docker 应用的可执行程序成为容器的 PID 1 进程, 可以接收 Unix 信号, 比如执行 docker stop 时能够接收到 SIGTERM。
  • shell 格式 会始终调用一个 shell 进程, 成为 /bin/sh -c 的子命令, 可执行程序不能响应 Unix 信号。

注意: ENTRYPOINT 使用 shell 格式 时, 会忽略 CMD 和 run 传入的参数, 如果要替换默认的 ENTRYPOINT 命令, 则需要在执行 docker run 的时候指定 --entrypoint 参数。

当 CMD 和 ENTRYPOINT 的使用总结如下:

  • 在 Dockerfile 中, 应该至少指定一个 CMD 和 ENTRYPOINT;
  • 将 Docker 当作可执行程序时, 应该使用 ENTRYPOINT 进行配置;
  • CMD 可以用作 ENTRYPOINT 默认参数, 或者用作 Docker 的默认命令;
  • CMD 可以被 docker run 传入的参数覆盖;
  • docker run 传入的参数会附加到 ENTRYPOINT 之后, 前提是使用了 exec 格式 。

最后我们来看一个实例:

ENTRYPOINT 使用 exec 格式, ENTRYPOINT 中的参数始终会被使用,而 CMD 的额外参数可以在容器启动时动态替换掉。

比如下面的 Dockerfile 片段:

ENTRYPOINT ["/bin/echo", "Hello"]
CMD ["world"]

当容器通过 docker run -it [image] 启动时,输出为:

$ docker run -it [image]
Hello world

而如果通过 docker run -it [image] CloudMan 启动,则输出为:

$ docker run -it [image] CloudMan
Hello CloudMan

[转帖]Dockerfile 中 ENTRYPOINT 与 CMD 的区别的更多相关文章

  1. Dockerfile中ENTRYPOINT 和 CMD的区别

    一.dockerfile中的 CMD 1.每个dockerfile中只能有一个CMD如果有多个那么只执行最后一个. 2.CMD 相当于启动docker时候后面添加的参数看,举个简单例子: docker ...

  2. dockerfile中ENTRYPOINT与CMD的结合

    一.写在前面 我们在上篇小作文docker容器dockerfile详解对中dockerfile有了比较全面的认识,我们也提到ENTRYPOINT和CMD都可以指定容器启动命令.因为这两个命令是掌握do ...

  3. [转帖]Dockerfile: ENTRYPOINT和CMD的区别

    Dockerfile: ENTRYPOINT和CMD的区别 https://zhuanlan.zhihu.com/p/30555962 在我们查阅Dockerfile的官方文档时, 有可能发现一些命令 ...

  4. k8s中command、args和dockerfile中的entrypoint、cmd之间的关系

    当用户同时写了command和args的时候自然是可以覆盖DockerFile中ENTRYPOINT的命令行和参数,那么对于具体情况呢,比如仅仅写了command或者args的时候呢?完整的情况分类如 ...

  5. docker学习笔记12:Dockerfile 指令 ENTRYPOINT介绍

    本文介绍Dockerfile的 ENTRYPOINT指令的含义. 先回顾下CMD指令的含义,CMD指令可以指定容器启动时要执行的命令,但它可以被docker run命令的参数覆盖掉. ENTRYPOI ...

  6. ENTRYPOINT 与 CMD

    在Dockerfile中 ENTRYPOINT 只有最后一条生效,如果写了10条,前边九条都不生效 ENTRYPOINT 的定义为运行一个Docker容器像运行一个程序一样,就是一个执行的命令 两种写 ...

  7. Dockerfile 中的 CMD 与 ENTRYPOINT

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

  8. Dockerfile 中 RUN, CMD, ENTRYPOINT 的区别

    RUN 指令:用于指定 docker build 过程中要运行的命令. 语法格式: RUN <command> 或 RUN ["<executeable>" ...

  9. Dockerfile 中的 CMD 与 ENTRYPOINT(转)

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

随机推荐

  1. [Luogu] 等差数列

    https://www.luogu.org/problemnew/show/P4243#sub 自己的思路错了 #include <iostream> #include <cstdi ...

  2. 5.13T1Send 题(send)

    Send 题(send) [题目描述] 某个国家有

  3. Django Admin中增加导出CSV功能

    参考: https://books.agiliq.com/projects/django-admin-cookbook/en/latest/export.html 在使用Django Admin时, ...

  4. 两个字说清楚编程语言实质-Python基础前传(3)

    大家都知道Python对于数据分析而言,意义重大.但对于运用Python来做数据分析的我们来说,学习一门编程语言,却有不小的难度:首先大部分伙伴不是计算机相关专业的科班出身,其次我们基本上也都没有程序 ...

  5. 泛目录程序(莲花泛目录程序/黑帽SEO/寄生虫/莲花泛目录解析/泛目录软件)

    莲花泛目录程序强大之处: 1.内容分类详细2.自动推送URL链接3.内置超强原创内容功能系统,页面深受百度搜索引擎喜爱.4.蜘蛛触发繁殖:蜘蛛触发程序任何页面,程序自动生成独立页面并引导繁殖.5.操作 ...

  6. js 给元素绑定回车事件

    经常会看到登录页面输入完账户密码,回车就登录了.实现方法: JQuery方法: $("#focus")为获取id为focus的元素 $("#focus").ke ...

  7. 【软件工程】Beta冲刺(5/5)

    链接部分 队名:女生都队 组长博客: 博客链接 作业博客:博客链接 小组内容 恩泽(组长) 过去两天完成了哪些任务 描述 将数据分析以可视化形式展示出来 新增数据分析展示等功能API 服务器后端部署, ...

  8. Echarts4+EchartsGL 3D迁徙图(附源码)

    最近遇到些Echarts迁徙图问题,在实现二维地图的迁徙图后开始开发3D迁徙图,在网上一查,发现3D版本迁徙图资料较少,自己研究并借鉴一些资料后写了一个小demo,希望能帮大家少走些弯路,共同学习. ...

  9. ZT:在mybatis的Mapping文件写入表名 出现异常ORA-00903: 表名无效 的解决

    简而言之,把#{tablename}换成${tablename}就能解决问题. 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:htt ...

  10. LC 873. Length of Longest Fibonacci Subsequence

    A sequence X_1, X_2, ..., X_n is fibonacci-like if: n >= 3 X_i + X_{i+1} = X_{i+2} for all i + 2 ...