dockerfile中CMD与ENTRYPOINT区别是什么?

無名 发表于: 2021-07-27   最后更新时间: 2021-07-27 16:26:15   600 游览

dockerfile中CMD与ENTRYPOINT区别是什么?

发表于 2021-07-27
添加评论

在Dockerfile中,CMDENTRYPOINT都是用来定义容器启动时要执行的命令或者程序。它们之间的主要区别在于如何处理命令参数以及如何与其他容器进行交互。

CMD:

  • CMD用于设置容器启动时的默认命令,但它可以在运行容器时被覆盖。
  • 如果Dockerfile中有多个CMD指令,只有最后一个CMD指令会生效。
  • CMD命令可以被容器启动时提供的命令参数覆盖。例如,您可以在运行容器时执行docker run my-image arg1 arg2,其中arg1arg2会替代CMD中的默认命令参数。

示例Dockerfile中的CMD用法:

FROM ubuntu
CMD ["echo", "Hello, World!"]

在运行此容器时,将执行默认的echo "Hello, World!"命令。但您可以通过提供其他命令参数来覆盖默认命令,例如:

docker run my-image echo "Custom Greeting"

ENTRYPOINT:

  • ENTRYPOINT也用于设置容器启动时的默认命令,但与CMD不同,ENTRYPOINT的命令不会被容器启动时提供的命令参数覆盖。
  • 如果Dockerfile中有多个ENTRYPOINT指令,只有最后一个ENTRYPOINT指令会生效。
  • 如果您需要在容器启动时传递命令参数,可以将它们放在ENTRYPOINT命令之后,CMD命令之前。

示例Dockerfile中的ENTRYPOINT用法:

FROM ubuntu
ENTRYPOINT ["echo", "Hello,"]
CMD ["World!"]

在运行此容器时,将始终执行echo "Hello,"命令,然后CMD中的命令参数("World!")会被追加到ENTRYPOINT命令之后,从而形成完整的命令。例如:

docker run my-image

将执行echo "Hello," "World!",输出为 "Hello, World!"。

总结:

  • 使用CMD来指定默认的命令和参数,允许在容器运行时进行覆盖。
  • 使用ENTRYPOINT来设置固定的入口点命令,通常与可选的CMD一起使用,以构建容器的主要执行逻辑。
你的答案

查看Dockerfile相关的其他问题或提一个您自己的问题