Dockerfile参考(8) – CMD设置运行容器时执行的命令

CMD指令有三种形式:

  • CMD [“executable”,”param1″,”param2″] [exec形式,这是首选形式]
  • CMD [“param1″,”param2”] [作为ENTRYPIOINT的默认参数]
  • CMD command param1 param2 [shell形式]
  • Dockerfile只能使用一个CMD指令。如果你使用了多个CMD那么Docker仅使用最后一个。
    CMD的主要作用是为执行容器提供默认值。这些默认值可以包括一个可执行程序,或省略可执行程序(这种情况下需要指定一个ENTRYPOINT指令)。

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

    注意:exec形式使用了JSON数组,意味着字符外使用双引号而不是单引号。

    不论使用是的shell或exec格式,CMD指令设置了当运行镜像时要执行的命令。
    如果使用CMD的shell形式,那么将在/bin/sh -c执行:

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

    如果你想不调用shell运行你的,那么你必须以JSON数组表示你的命令并给出这个命令的完整路径。这个数组形式是CMD的首先格式。额外的参数必须单独地使用一个数组的字符串表示:

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

    如果你想每次容器都是执行相同的执行程序,那么你应该考虑ENTRYPOINT和CMD一起使用。
    如果用户在docker run指定参数,那么将会覆盖CMD指定的默认参数。

    注意:不要把RUN和CMD搞混了。RUN实际上是在构建镜像时执行命令并提交执行结果到镜像;而CMD在构建期间不会执行任何命令,只是为镜像预先设置运行时容器时运行的命令或参数。

    标签:Docker容器 发布于:2019-11-19 22:47:18