[转帖]Dockerfile 中 ENTRYPOINT 与 CMD 的区别
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 格式)
在使用时, 要注意一下问题:
- 包含可执行文件时, 为容器指定默认执行命令, 这个是主要用途;
- 不包含可执行文件时, 必须提供 ENTRYPOINT 配置, CMD 作为默认参数;
- 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 的区别的更多相关文章
- Dockerfile中ENTRYPOINT 和 CMD的区别
一.dockerfile中的 CMD 1.每个dockerfile中只能有一个CMD如果有多个那么只执行最后一个. 2.CMD 相当于启动docker时候后面添加的参数看,举个简单例子: docker ...
- dockerfile中ENTRYPOINT与CMD的结合
一.写在前面 我们在上篇小作文docker容器dockerfile详解对中dockerfile有了比较全面的认识,我们也提到ENTRYPOINT和CMD都可以指定容器启动命令.因为这两个命令是掌握do ...
- [转帖]Dockerfile: ENTRYPOINT和CMD的区别
Dockerfile: ENTRYPOINT和CMD的区别 https://zhuanlan.zhihu.com/p/30555962 在我们查阅Dockerfile的官方文档时, 有可能发现一些命令 ...
- k8s中command、args和dockerfile中的entrypoint、cmd之间的关系
当用户同时写了command和args的时候自然是可以覆盖DockerFile中ENTRYPOINT的命令行和参数,那么对于具体情况呢,比如仅仅写了command或者args的时候呢?完整的情况分类如 ...
- docker学习笔记12:Dockerfile 指令 ENTRYPOINT介绍
本文介绍Dockerfile的 ENTRYPOINT指令的含义. 先回顾下CMD指令的含义,CMD指令可以指定容器启动时要执行的命令,但它可以被docker run命令的参数覆盖掉. ENTRYPOI ...
- ENTRYPOINT 与 CMD
在Dockerfile中 ENTRYPOINT 只有最后一条生效,如果写了10条,前边九条都不生效 ENTRYPOINT 的定义为运行一个Docker容器像运行一个程序一样,就是一个执行的命令 两种写 ...
- Dockerfile 中的 CMD 与 ENTRYPOINT
CMD 和 ENTRYPOINT 指令都是用来指定容器启动时运行的命令.单从功能上来看,这两个命令几乎是重复的.单独使用其中的一个就可以实现绝大多数的用例.但是既然 doker 同时提供了它们,为了在 ...
- Dockerfile 中 RUN, CMD, ENTRYPOINT 的区别
RUN 指令:用于指定 docker build 过程中要运行的命令. 语法格式: RUN <command> 或 RUN ["<executeable>" ...
- Dockerfile 中的 CMD 与 ENTRYPOINT(转)
add by zhj: CMD和ENTRYPOINT的差异很小,可以认为完全可以相互代替.两者都支持shell模式和exec模式, shell模式:跟你在shell下执行命令的格式一样,简单方便,但 ...
随机推荐
- 微信小程序填坑之旅(1)-app.js中用云开发获取openid,在其他页上用app.globaldata.openid获取为空
参考:小程序如何在其他页面监听globalData中值的变化?https://www.jianshu.com/p/8d1c4626f9a3 原因就是:app.js没执行完时,其他页已经onload了, ...
- 我理解的windows中断管理
只谈外部中断的windows内核管理,异常和trap不在此文的讨论之列. 1. windows中断总貌 在windows中,物理上的中断源被抽象为KINTERRUPT结构.一个中断源在windows中 ...
- 基础 Linux 命令速查清单
jaywcjlove/linux-command: Linux命令大全搜索工具,内容包含Linux命令手册.详解.学习.搜集.https://git.io/linux https://github. ...
- 微信公众号【黄小斜】和【Java技术江湖】
- javax.el.PropertyNotFoundException: Property 'id' not found on type java.lang.String 可长点心吧
在网上搜了好多帖子都说<c:forEach items="${list }" var="stu">标签list没有加${}: 可我的问题不是这个,而 ...
- js判断是否联网
// navigator.onLine if (navigator.onLine){ //正常工作 console.log("在线状态............................ ...
- Netfilter 之 钩子函数调用
本篇主要从三层协议栈调用函数NF_HOOK说起,不断深入,分析某个钩子点中所有钩子函数的调用流程,但是本文不包含规则介绍和核心的规则匹配流程,后续文章将继续分析: NF_HOOK函数先调用了nf_ho ...
- nginx 的使用
nginx 反向代理,并拥有其高效的性能,并发效果好,是解决跨域最好的选择 nginx 的使用 1. 下载:在官网上下载 window 系统的 nginx 网址:http://nginx.org/en ...
- opencv配置运行问题
opencv是图像处理常用的一个库文件,对于一些新手来说,配置完后运行,总会有这样或者那样的错误,会挫伤其学习积极性,这里将常见的几种错误列举出来,供其参考和使用. 方法/步骤第一种错误叫no suc ...
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_6-3.微信网站扫码支付介绍
笔记 3.微信网站扫码支付介绍 简介:讲解微信网页扫码支付 1.扫码支付文档:https://pay.weixin.qq.com/wiki/doc/api/native.php ...