Dockerfile 中 CMD 和ENTRYPOINT 的区别

1-联系

  • 允许用户指定容器的默认执行的命令

2-区别

  • CMD有3种格式,Exec 格式是 CMD 的推荐格式

    Exec 格式:CMD ["executable","param1","param2"]
    CMD ["param1","param2"] 为 ENTRYPOINT 提供额外的参数,此时 ENTRYPOINT 必须使用 Exec 格式。
    Shell 格式:CMD command param1 param2
    
  • ENTRYPOINT 有两种格式

    Exec 格式:ENTRYPOINT ["executable", "param1", "param2"] 这是 ENTRYPOINT 的推荐格式
    Shell 格式:ENTRYPOINT command param1 param2
    
    ## Exec 格式
    
    ENTRYPOINT 的 Exec 格式用于设置要执行的命令及其参数,同时可通过 CMD 提供额外的参数。
    
    ENTRYPOINT 中的参数始终会被使用,而 CMD 的额外参数可以在容器启动时动态替换掉。
    
    比如下面的 Dockerfile 片段:
    
    ENTRYPOINT ["/bin/echo", "Hello"]  
    CMD ["world"]
    
    当容器通过 docker run -it [image] 启动时,输出为:
    Hello world
    
    而如果通过 docker run -it [image] CloudMan 启动,则输出为:
    Hello CloudMan
    
    ## Shell 格式
    
    ENTRYPOINT 的 Shell 格式会忽略任何 CMD 或 docker run 提供的参数。
    
  • 如果 docker run 指定了其他命令,CMD 指定的默认命令将被忽略。

  • 如果 Dockerfile 中有多个 CMD 指令,只有最后一个 CMD 有效。

  • ENTRYPOINT 看上去与 CMD 很像,它们都可以指定要执行的命令及其参数。不同的地方在于 ENTRYPOINT 不会被忽略,一定会被执行,即使运行 docker run 时指定了其他命令。

posted @ 2022-06-08 09:14  bhxuwei  阅读(2774)  评论(0)    收藏  举报