cmd与entrypoint的区别

前言

环境:centos7.9 docker version 20.10.14
Dockerfile中最容易让人混淆的是CMDENTRYPOINT这两个指令,本篇我们来介绍这两个指令的用法和区别。

CMD 指定容器启动时默认运行命令

如果docker run指定了其他命令,CMD指定的默认命令将会被忽略掉;
如果Dockerfile存在多个CMD指令,则只有最后一个CMD有效;

1、exec格式:CMD ["executable","param1","param1"] 这是CMD的推荐格式
2、CMD ["param1","param1"] 为ENTRYPOINT提供额外的参数,此外ENTRYPOINT 必须使用exec格式
3、shell格式:CMD command param1 param2

演示示例:

CMD ["echo","Hello world"]
docker run -it [image]
Hello world									#输出结果

CMD echo "Hello world"
docker run -it [image]
Hello world									#输出结果

docker run -it [image] /bin/bash  			#CMD命令会被忽略
/:											#进入到容器内了
									
CMD ["/bin/sh","-c","echo hello,$name"]    	#-c表示解析变量

ENTRYPOINT 指定容器启动时运行的命令

ENTRYPOINT 指令也是指定容器启动时运行的命令,如果Dockerfile存在多个ENTRYPOINT 指令,则只有最后一个ENTRYPOINT 有效;
ENTRYPOINTCMD很类似,但是ENTRYPOINT 一定不会被忽略,一定会执行;

1、exec格式:ENTRYPOINT ["executable","param1","param1"] 这是ENTRYPOINT 的推荐格式
ENTRYPOINT的exec格式用于设置要执行的命令和参数,同时可通过CMD提供额外的参数
2、shell格式:ENTRYPOINT command param1 param2
注意:ENTRYPOINT的shell格式会忽略任何CMD或docker run提供的参数

ENTRYPOINT 中的参数始终会被使用,而CMD中的额外参数可以在容器启动时动态替换掉。
如果Dockerfile文件既有CMD,又有ENTRYPOINT ,那么CMD将会被当做参数传递给ENTRYPOINT

演示示例:

CMD ["World"]
ENTRYPOINT ["/bin/echo","Hello"]
docker run -it [images] 			#启动容器,输出结果如下
Hello World

CMD ["World"]
ENTRYPOINT ["/bin/echo","Hello"]
docker run -it [images] Man			#在命令行指定参数,启动容器,输出结果如下
Hello Man							#CMD被命令行参数忽略掉了,所以输出就是Hello Man


CMD ["World"]
ENTRYPOINT "/bin/echo" "Hello" 		#使用shell格式
docker run -it [images]				#启动容器,输出结果如下
Hello								#shell格式的ENTRYPOINT会忽略任何CMD或命令行参数

docker run -it [images] Man			#即使在命令行指定参数,启动容器,输出结果如下
Hello								#shell格式的ENTRYPOINT会忽略任何CMD或命令行参数
  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CMDENTRYPOINTDockerfile中两个常用的指令,它们在容器启动时运行命令方面有一些区别CMD指令用于指定容器启动时默认运行的命令,它可以被docker run命令行参数和CMD指令本身提供的参数覆盖。CMD指令有两种格式:exec格式和shell格式。exec格式的CMD指令推荐使用,它可以设置要执行的命令和参数,并且可以通过docker run命令行参数提供额外的参数。 ENTRYPOINT指令也是指定容器启动时运行的命令,与CMD不同的是,ENTRYPOINT一定会执行,而且不会被忽略。如果Dockerfile中存在多个ENTRYPOINT指令,只有最后一个ENTRYPOINT有效。ENTRYPOINT有两种格式:exec格式和shell格式。 exec格式的ENTRYPOINT指令用于设置要执行的命令和参数,同时可通过CMD提供额外的参数。shell格式的ENTRYPOINT指令会忽略任何CMDdocker run提供的参数。 综上所述,CMDENTRYPOINT区别在于CMD指令可以被覆盖,而ENTRYPOINT指令一定会执行且不会被忽略。此外,CMDENTRYPOINT指令都有exec格式和shell格式,但exec格式更常用和推荐。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [cmdentrypoint区别](https://blog.csdn.net/MssGuo/article/details/126348571)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值