CMD/ENTROYPOINT区别

相同点:都是指定一个容器:启动时要运行的命令

不同点(重点):

CMD:

dockerfile中可以有多个CMD指令,但是只有最后一个生效,CMD会被docker run之后的参数替换

例子:docker run -it -p 8888:8080 tomcat ls -l

[root@tzh tzh]# docker run -it -p 8888:8080 tomcat  ls -l
total 152
-rw-r--r-- 1 root root 18982 Jun  3 17:13 BUILDING.txt
-rw-r--r-- 1 root root  5409 Jun  3 17:13 CONTRIBUTING.md
-rw-r--r-- 1 root root 57092 Jun  3 17:13 LICENSE
-rw-r--r-- 1 root root  2333 Jun  3 17:13 NOTICE
-rw-r--r-- 1 root root  3255 Jun  3 17:13 README.md
-rw-r--r-- 1 root root  6898 Jun  3 17:13 RELEASE-NOTES
-rw-r--r-- 1 root root 16262 Jun  3 17:13 RUNNING.txt
drwxr-xr-x 2 root root  4096 Jun 10 08:17 bin
drwxr-xr-x 2 root root  4096 Jun  3 17:13 conf
drwxr-xr-x 2 root root  4096 Jun 10 08:17 lib
drwxrwxrwx 2 root root  4096 Jun  3 17:10 logs
drwxr-xr-x 2 root root  4096 Jun 10 08:17 native-jni-lib
drwxrwxrwx 2 root root  4096 Jun 10 08:17 temp
drwxr-xr-x 2 root root  4096 Jun 10 08:17 webapps
drwxr-xr-x 7 root root  4096 Jun  3 17:11 webapps.dist
drwxrwxrwx 2 root root  4096 Jun  3 17:10 work
[root@tzh tzh]# docker ps
CONTAINER ID       IMAGE               COMMAND             CREATED             STATUS             PORTS               NAMES
[root@tzh tzh]#

tomcat 默认的dockfile里面最后的是CMD["catalina.sh","run"],可是当我们执行了docker run -it -p 8888:8080 tomcat ls -l 以后,由于CMD只保留最后一个CMD,所以最后就变成了ls -l /usr/local/tomcat,所以就如上代码所示,看到的是/usr/local/tomcat的内容。而且通过docker ps发现tomcat并没运行起来。

ENTROYPOINT:

docker run之后的参数会被当做参数传递给 ENTRYPOINT,之后形成新的命令组合。就是更加强大!

给他用上ENTRPOINT演示:

1、制作一个ENTRPOINT版可以查询IP信息的容器

[root@tzh tzh]# cat test2
FROM centos
RUN yum install -y curl
CMD [ "curl", "-s", "http://ip.cn" ]

2、构建并启动它

docker build -f test2 -t myip .

docker run -it myip #运行起来就可以看到自己的ip、地址

docker run -it myip -i #发现报错

[root@tzh tzh]# docker run -it myip -i
docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"-i\": executable file not found in $PATH": unknown.
ERRO[0000] error waiting for container: context canceled

解决办法:

cp test2 test3 #拷贝一份dockerfile

[root@tzh tzh]# cat test3
FROM centos
RUN yum install -y curl
ENTRYPOINT [ "curl", "-s", "http://ip.cn" ]

把CMD 换成 ENTROYPOINT

再次构建启动一个新的容器

docker build -f test3 -t myip2 .

docker run -it myip2 -i

CMD/ENTROYPOINT区别的更多相关文章

  1. [转]【docker】CMD ENTRYPOINT 区别

    本文转自:https://blog.csdn.net/u010900754/article/details/78526443 昨天用Dockerfile来启动mongodb的集群,启动参数--repl ...

  2. AMD 和 CMD 的区别有哪些

    在说AMD 和 CMD 的区别之前,先说明commonjs,它的回调和amd.cmd的不同于:commomjs加载完了所有模块,才执行回调amd和cmd是加载对应的模块,就可以执行回调中对应的代码 1 ...

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

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

  4. [转帖]Dockerfile 中 ENTRYPOINT 与 CMD 的区别

    Dockerfile 中 ENTRYPOINT 与 CMD 的区别 https://it.baiked.com/system/docker/1975.html 简单区别 Dockerfile 有两个启 ...

  5. AMD 和 CMD 的区别有哪些?

    看到玉伯在介绍seajs和requirejs时,说“RequireJS 遵循的是 AMD(异步模块定义)规范,SeaJS 遵循的是 CMD (通用模块定义)规范”. 能否详细(举例)说明下这个2个规范 ...

  6. 【整理】 JavaScript模块化规范AMD 和 CMD 的区别有哪些?

    根据玉伯等人在知乎上的回答整理.整理中... AMD 规范在这里:https://github.com/amdjs/amdjs-api/wiki/AMD CMD 规范在这里:https://githu ...

  7. commonjs amd cmd的区别

    一篇博客告诉你三者的区别:http://zccst.iteye.com/blog/2215317 告诉你三者同requirejs seajs的区别:http://blog.chinaunix.net/ ...

  8. Perl system(cmd) 和 `cmd` 的区别探讨

    在perl中系统调用有两种方式,一种是system(cmd),另一种是`system`以前一直没注意,这两种方式的区别,还以为是一样的,今天写脚本的时候,忽然想要获取命令的返回值,然后,用了my $r ...

  9. AMD 和 CMD 的区别

    AMD 规范在这里:https://github.com/amdjs/amdjs-api/wiki/AMD CMD 规范在这里:https://github.com/seajs/seajs/issue ...

随机推荐

  1. vue实现局部预览打印

    html <div id="subOutputRank-print"> <h1></h1> </div> js doPrint(e) ...

  2. openshift 4.3中安装helm3并通过helm方式部署应用

    openshift 4.3中安装helm3并通过helm方式部署应用 简介 Helm是一个命令行界面(CLI)工具,可简化将应用程序和服务部署到OpenShift Container Platform ...

  3. 支持MySQL数据库的agumaster版本

    下载地址:https://files.cnblogs.com/files/xiandedanteng/agumaster20200501.zip

  4. 性能测试1:loadrunner介绍及代理录制

    一.安装loadrunner lr安装环境要求: Lr11只支持ie9及一下,火狐30以下,不支持chrome.  操作系统只支持到win7.Lr打开时必须用管理员身份打开 在虚拟机中安装的win7, ...

  5. webstorm中emmet展开a标签和行内元素不换行的解决办法

    大家好我是木瓜太香,大家在使用 webstorm 编写 html 的时候可能会遇到展开部分标签挨在一起的情况,相信很多小伙伴都想解决这个问题,接下来我们就开始吧! 先来看看我们输入如下 emmet 代 ...

  6. swift基本数据类型使用-字典使用

    目录 1.定义的定义 2.对可变字典的基本操作 3.遍历字典 4.字典合并 5.示例 1.定义的定义 1> 不可变字典: let 2> 可变字典: var 2.对可变字典的基本操作 增删改 ...

  7. 福利来了~Linux一键部署包,环境安装不用愁!!!

    前言 昨天一哥们的弟弟突然问我有没有部署过的Linux,公司连个运维都没有,服务器都要后端部署.... 你有没有相似的遭遇呢?公司规模小,后端即是运维,一份工资干两份活,哈哈~ 为了解决这老弟的困惑, ...

  8. 云计算openstack共享组件——消息队列rabbitmq(3)

    一.MQ 全称为 Message Queue, 消息队列( MQ ) 是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们. 消息传 ...

  9. HashTable学习

    HashTable虽然加上了线程安全,但是源码走向和思想比hashMap还是要简单直白很多,hashmap还得再看,因为很多关键点没有get,下午&明天自己去debug一遍再继续看看博客 脑子 ...

  10. 永远不要在代码中使用“User”这个单词

    ​ 当你意识到你在项目开始时做的轻量.简单的设想竟然完全错了时,你已经用了六个月的时间投入到这个项目上.现在你需要解决这些问题,才能让这个系统继续运行下去,你发现你用在这个项目上的精力远远超出了你的预 ...