007-Dockerfile-CMD

语法

语法 1

CMD ["executable", "param1", "param2"] (exec 形式,推荐)

语法 2

CMD ["param1", "param2"] (作为 ENTRYPOINT 的默认参数)

语法 3

CMD command param1 param2 (shell 形式)

作用 & 描述

Dockerfile中只能有一条 CMD 指令。如果有多个 CMD,则最后一个 CMD 生效。

CMD 的主要目的是为执行容器提供默认值。这些默认值可以包含可执行文件,也可以省略可执行文件,在这种情况下,你还必须制定 ENTRYPOINT 指令。

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

如果使用CMD的shell形式,那么将在/bin/sh -c中执行:
FROM ubuntu
CMD echo “This is a test.” | wc -
如果要在没有shell的情况下运行,则必须将该命令表示为 JSON 数组并提供可执行文件的完整路径。此数组形式是CMD的首选格式。任何其它参数必须在数组汇总单独表示为字符串:
FROM ubuntu
CMD echo “This is a test.” | wc -

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

如果用户指定了 docker run 的参数,那么它们将覆盖 CMD 中指定的默认值。

注意

注意 1

如果使用 CMD 为 ENTRYPOINT 指令提供默认参数,则应使用 JSON 数组格式制定 CMD 和 ENTRYPOINT 指令。

注意 2

exec 表单被解析为 JSON 数组,这意味着你必须使用双引号(")来围绕单词而不是单引号(’)。

注意 3

与 shell 表单不同,exec 表单不会调用shell命令。这意味着不会发生正常的shell处理。例如,CMD [“echo”, “${HOME}”]不会对 $HOME进行变量替换。如果你想要shell处理,那么 要么使用shell表单,要么直接执行shell,例如:CMD [“sh”, “-c”, “echo $HOME”]。当使用 exec 表单并直接执行shell时(如shell表单的情况),它是执行环境变量扩展的shell,而不是docker。

注意 4

不要讲 RUN 与 CMD 混淆。RUN 实际上运行一个命令并提交结果;CMD 在构建时不执行任何操作,但指定了镜像的预期命令。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值