[转帖]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下执行命令的格式一样,简单方便,但 ...
随机推荐
- noi 第n小的质数
总时间限制: 1000ms 内存限制: 65536kB 描述 输入一个正整数n,求第n小的质数. 输入 一个不超过10000的正整数n. 输出 第n小的质数. 样例输入 10 样例输出 29 一定 ...
- initData()
void initData(){ int i, j; //加载数据时让用户等待,一般情况加载数据比较快 printf("游戏加载中,请稍后........."); //遍历地图中的 ...
- 黑马vue---20、v-if和v-show的使用和特点
黑马vue---20.v-if和v-show的使用和特点 一.总结 一句话总结: v-if 的特点:每次都会重新删除或创建元素 v-show 的特点: 每次不会重新进行DOM的删除和创建操作,只是切换 ...
- python获得坐标系信息
# -*- coding: cp936 -*- ############################################################# import arcpy i ...
- 【Makefile】Makefile的自动化变量$@、$^ 、$<等
所谓自动化变量,就是这种变量会把“模式”中所定义的一系列的文件自动地挨个取出,直至所有的符合模式的文件都取完了.这种自动化变量只应出现在规则的命令中. $@ 表示规则中的目标文件集.在模式规则中,如果 ...
- LC 670. Maximum Swap
Given a non-negative integer, you could swap two digits at most once to get the maximum valued numbe ...
- Java访问Oracle服务器
Java访问Oracle服务器--orcl数据库---emp表 private static String driver = "oracle.jdbc.driver.Orac ...
- Camera 录制视频的实现
使用 Camera 录制视频, 实现步骤如下: 需要权限: android.permission.CAMERA android.permission.RECORD_AUDIO android.perm ...
- flutter richText富文本
flutter中富文本使用 RichText( text: TextSpan( text: '登陆即同意', style: TextStyle(fontSize: 14, color: Colors. ...
- WampServer 下载以及安装问题 以及配置远程连接MYSQL
WampServer 3.0 下载: http://dl.pconline.com.cn/download/52877-1.html 碰到的问题DDL无法添加,解决方法:MSVCR110.DLL fo ...