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