Dockerfile 之 CMD

CMD指令有三种形式:

  • CMD ["executable","param1","param2"] (exec form, this is the preferred form)
  • CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
  • CMD command param1 param2 (shell form)

一个Dockerfile中只能有一条CMD指令。如果你列出一个以上的CMD,那么只有最后一个CMD会生效。

CMD的主要用途是为执行容器提供默认值。这些缺省值可以包括可执行文件,也可以省略可执行文件,在这种情况下,您还必须指定一个ENTRYPOINT  指令。

注意:如果CMD用于为ENTRYPOINT指令提供默认参数,那么CMD和ENTRYPOINT指令都应该使用JSON数组格式指定。

注意:exec form 被解析为JSON数组,这意味着必须在单词周围使用双引号("),而不是单引号(')。

shell form不同,exec form不调用命令shell。这意味着不会发生正常的shell处理。例如,CMD [ "echo", "$HOME" ] 不会对$HOME执行变量替换。如果您需要shell处理,那么要么使用shell form,要么直接执行shell,例如:CMD ["sh", "-c", "echo $HOME"]。当使用execform 并直接执行shell时(如shell form的情况),执行环境变量扩展的是shell,而不是docker。

在shell或exec格式中使用时,CMD指令设置在运行映像时要执行的命令。

如果使用CMD的shell形式,那么<command> 将在/bin/sh -c中执行:

FROM ubuntu
CMD echo "This is a test." | wc -

如果您想运行没有shell的<命令>,那么您必须将该命令表示为JSON数组,并给出可执行文件的完整路径。这种数组形式是CMD的首选格式。任何附加参数必须单独表示为数组中的字符串:

FROM ubuntu
CMD ["/usr/bin/wc","--help"]

如果希望容器每次都运行相同的可执行文件,那么应该考虑将ENTRYPOINT与CMD结合使用。

如果用户指定docker运行的参数,那么他们将覆盖CMD中指定的默认值。

注意:不要将RUN与CMD混淆。RUN实际运行命令并提交结果;CMD在构建时不执行任何操作,但是为映像指定想要的命令。

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值