Dockerfile中CMD和ENTRYPOINT命令详解

2020-06-17 06:44:08易采站长站整理

或者:

虽然实现方式不同,但最终容器运行的命令是一样的。

同时使用 CMD 和 ENTRYPOINT 的情况

对于 CMD 和 ENTRYPOINT 的设计而言,多数情况下它们应该是单独使用的。当然,有一个例外是 CMD 为 ENTRYPOINT 提供默认的可选参数。

我们大概可以总结出下面几条规律:

     • 如果 ENTRYPOINT 使用了 shell 模式,CMD 指令会被忽略。

     • 如果 ENTRYPOINT 使用了 exec 模式,CMD 指定的内容被追加为 ENTRYPOINT 指定命令的参数。

     • 如果 ENTRYPOINT 使用了 exec 模式,CMD 也应该使用 exec 模式。

真实的情况要远比这三条规律复杂,好在 docker 给出了官方的解释,如下图所示:

当我们无法理解容器中运行命令的行为时,说不定通过这个表格可以解开疑惑!

总结

对于 Dockerfile 来说,CMD 和 ENTRYPOINT 是非常重要的指令。它们不是在构建镜像的过程中执行,而是在启动容器时执行,所以主要用来指定容器默认执行的命令。但是提供两个功能类似的指令,必然会给用户带来理解上的困惑和使用中的混淆。希望本文能够帮助大家理解二者的区别与联系,并更好的使用二者。

参考:

Docker 官方文档
ENTRYPOINT vs CMD: Back to Basics
Dockerfile: ENTRYPOINT vs CMD

您可能感兴趣的文章:编写最佳的Dockerfile的方法Docker中镜像构建文件Dockerfile与相关命令的详细介绍Docker Dockerfile的使用实例Docker 基础之Dockerfile命令详解详解Dockerfile 中的 COPY 与 ADD 命令Dockerfile指令详解Dockerfile 指令 ADD 和 COPY介绍浅谈docker Dockerfile 指令 VOLUME 介绍Docker基础教程之Dockerfile语法详解