展开

docker ENTRYPOINT与CMD区别

最后发布时间 : 2023-12-28 16:57:15 浏览量 :

在 Docker 中,ENTRYPOINT 和 CMD 都是用于定义容器启动时要执行的命令或脚本。它们之间的主要区别在于如何处理容器运行时传递的命令参数。

下面是它们的区别:

ENTRYPOINT:

  • ENTRYPOINT 定义了容器中要执行的命令或可执行文件。
  • ENTRYPOINT 的值可以是一个字符串或一个数组。
  • 在运行容器时,你可以在 docker run 命令后面提供参数,这些参数将作为 ENTRYPOINT 命令的参数。
  • 如果在运行容器时提供了参数,它们将被附加到 ENTRYPOINT 命令的末尾。
  • ENTRYPOINT 的参数不会被覆盖,而是会被追加。
  • 通常情况下,ENTRYPOINT 用于指定容器的主要执行命令或应用程序。

CMD:

  • CMD 也定义了容器中要执行的命令或可执行文件。
  • CMD 的值可以是一个字符串或一个数组。
  • 在运行容器时,如果没有指定命令参数,那么 CMD 中定义的命令将被执行。
  • 如果在运行容器时提供了命令参数,它们将覆盖 CMD 中定义的命令。
  • CMD 的参数将被覆盖,而不是追加。
  • CMD 通常用于提供容器的默认执行命令,但可以被用户在运行容器时覆盖。

下面是一个示例,演示了 ENTRYPOINT 和 CMD 的使用:

FROM ubuntu:latest

# 使用 ENTRYPOINT 定义容器的主要执行命令
ENTRYPOINT ["echo", "Hello,"]

# 使用 CMD 定义容器的默认参数
CMD ["World!"]

在上述示例中,如果你运行容器而不提供命令参数,那么容器将输出 Hello, World!。如果你在运行容器时提供了命令参数,例如 docker run my-image Goodbye!,那么容器将输出 Hello, Goodbye!,因为命令参数覆盖了 CMD 中定义的默认参数。

总结起来,ENTRYPOINT 用于定义容器的主要执行命令,而 CMD 用于提供容器的默认参数,但可以被用户在运行容器时覆盖。