CMD

参考:CMD

一个Dockerfile文件仅能执行一条CMD指令。如果存在多条CMD指令,仅最后一个CMD指令起作用

语法

CMD指令有3种书写格式:

  1. CMD ["executable","param1","param2"]exec形式,推荐)
  2. CMD ["param1","param2"]ENTRYPOINT指令的默认参数)
  3. CMD command param1 param2shell形式)

作用

CMD指令的主要目的是提供容器默认操作。可以通过CMD指定一个可执行文件,如果在Dockerfile中指定了ENTRYPOINT,那么CMD指定的可执行文件会被忽略

注意:如果CMD指令用于提供ENTRYPOINT指令参数,那么两者必须按JSON数组格式编写

注意:如果使用exec格式,其将会解析成JSON数组,所以必须使用双引号而不是单引号

调用shell命令:

  • exec形式的CMD指令不会调用命令行shell,所以如果要使用shell命令,必须显示调用shell,比如CMD [ "sh", "-c", "echo $HOME" ]
  • shell形式的CMD指令可以直接调用,比如CMD echo $HOME

调用非shell命令,必须使用exec形式,且使用命令绝对路径,比如CMD ["/usr/bin/wc","--help"]

如果在运行docker run时指定了运行命令,将会覆盖CMD指令操作

RUN vs. CMD

  • RUN用于在镜像构建时运行,并提交运行结果
  • CMD在构建时不执行任何操作,但指定镜像的预期命令