Docker 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)

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

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

注意:如果CMD用于提供ENTRYPOINT指令的默认参数,则CMD和ENTRYPOINT指令均应使用JSON数组格式指定。

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

注意:与shell窗体不同,exec窗体不会调用命令shell。这意味着不会进行常规的外壳处理。例如,CMD [ "echo", "$HOME" ]将不会对进行变量替换$HOME。如果要进行shell处理,则可以使用shell形式或直接执行shell,例如:CMD [ "sh", "-c", "echo $HOME" ]。

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

如果您使用的shell形式CMD,则该命令将在/bin/sh -c以下位置执行:

FROM ubuntu
CMD echo "这是一个测验。" | wc -

如果要在没有外壳的情况下运行命令,则必须将命令表示为JSON数组,并提供可执行文件的完整路径。此数组形式是的首选格式CMD。任何其他参数必须在数组中分别表示为字符串:

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

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

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

注意:请勿RUN与混淆CMD。RUN实际上在图像构建时运行命令并提交结果;CMD在生成时不执行任何操作,但是指定映像的预期命令。