# CMD

**CMD指令有三种使用形式：**

* **CMD \["executable",  "param1",  "param2"]（优先选择使用的形式）**
* **CMD \["param1",  "param2"]（作为entrypoint的默认参数）**
* **CMD command param1 param2(shell 形式)**

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

**CMD**的主要目的是为执行中的容器提供默认值。这些默认值可以包含可执行命令，也可以省略可执行命令，在这种情况下，必须指定**ENTRYPOINT指令**。

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

**NOTE:**

**exec**形式的指令被解析为**JSON数组**，这意味着对于单词，我们必须使用**双引号**包围，而不是**单引号.**

与**shell**形式不同，**exec**形式不会调用命令行**shell**。这意味着正常的**shell**处理不会发生。例如**CMD \["echo"，"$HOME"]**&#x4E0D;会&#x5728;**$HOME**上进行变量替换。如果要进行**shell**处理，则可以使用**shell**形式或直接执行**shell**，例如：**CMD \["sh"，"-c"，"echo $HOME"]**。当使用**exec**形式并直接执行**shell**时（例如在**shell**形式中），是由**shell**进行环境变量扩展，而不是**docker**。

当以**shell**或**exec**形式调用时，**CMD指令**设置运行镜像时要执行的命令。

如果使用**CMD**的**shell**形式，则将&#x5728;**/bin/sh -c**中执行：

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

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

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

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

**NOTE:**

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

**NOTE:**

不要将**RUN**与**CMD**混淆。**RUN**实际上是运行命令并提交结果，它是在构建阶段执行的。**CMD**在构建镜像时不执行任何操作，但是指定了镜像在启动时需要执行的命令。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://camelgemonion.gitbook.io/docker/dockerfile-zhi-ling/cmd.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
