docker 中 ENTRYPOINT CMD 的区别

ENTRYPOINTCMD都是Dockerfile指令,用于在容器启动时运行指定的命令,但是它们的使用方式和目的稍有不同。

  1. ENTRYPOINT:定义在容器启动时要运行的命令,即设置容器的入口。当Docker容器启动时,会执行ENTRYPOINT指定的命令,且该命令不会被docker run的命令行参数覆盖。如果在Dockerfile中同时指定了ENTRYPOINTCMD,那么CMD中的内容将会作为ENTRYPOINT的参数。
  2. CMD:提供给容器启动后的默认执行命令,或者初始化ENTRYPOINT指令的默认参数。CMD指定的命令可以被docker run命令行中指定的任何参数覆盖。

举例来说,假设你的Dockerfile如下:

FROM ubuntu
ENTRYPOINT ["/bin/echo", "Hello"]
CMD ["world"]

然后你运行docker run -it image-name ,你将看到输出”Hello world“。这是因为”world“被作为参数传递给了ENTRYPOINT的命令。

但是如果你运行docker run -it image-name Docker,你将看到输出”Hello Docker“。这是因为CMD的默认参数”world“被docker run命令行中的”Docker“覆盖了。