展开

docker ENTRYPOINT与CMD区别

最后发布时间 : 2024-11-13 19:43:09 浏览量 :

在 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 用于提供容器的默认参数,但可以被用户在运行容器时覆盖。

docker 查看image ENTRYPOINT和CMD

 docker inspect --format='{{.Config.Entrypoint}} {{.Config.Cmd}}' registry.cn-hangzhou.aliyuncs.com/wybioinfo/tidyverse:4.4

指定--entrypoint

docker run --rm -it\
	-e USERID=$(id -u) -e GROUPID=$(id -g) \
	-e DISABLE_AUTH=true \
	 -p 8787:8787  \
	-w $PWD \
	-v $PWD:/home/rstudio  \
	-v $PWD:$PWD \
	--entrypoint /init \
	registry.cn-hangzhou.aliyuncs.com/wybioinfo/tidyverse:4.4  bash