• Dockerfile里指定执行命令用ENTRYPOING和用CMD有何不同?


    结论:运行时机不太一样。

    RUN是在Build时运行的,先于CMD和ENTRYPOINT。Build完成了,RUN也运行完成后,再运行CMD或者ENTRYPOINT。

    ENTRYPOINT和CMD的不同点在于执行docker run时参数传递方式,CMD指定的命令可以被docker run传递的命令覆盖,例如,如果用CMD指定:

    ...
    CMD ["echo"]

    然后运行

    docker run CONTAINER_NAME echo foo

    那么CMD里指定的echo会被新指定的echo覆盖,所以最终相当于运行echo foo,所以最终打印出的结果就是:

    foo

    而ENTRYPOINT会把容器名后面的所有内容都当成参数传递给其指定的命令(不会对命令覆盖),比如:

    ...
    ENTRYPOINT ["echo"]

    然后运行

    docker run CONTAINER_NAME echo foo

    则CONTAINER_NAME后面的echo foo都作为参数传递给ENTRYPOING里指定的echo命令了,所以相当于执行了

    echo "echo foo"

    最终打印出的结果就是:

    echo foo

    另外,在Dockerfile中,ENTRYPOINT指定的参数比运行docker run时指定的参数更靠前,比如:

    ...
    ENTRYPOINT ["echo", "foo"]

    执行

    docker run CONTAINER_NAME bar

    相当于执行了:

    echo foo bar

    打印出的结果就是:

    foo bar

    Dockerfile中只能指定一个ENTRYPOINT,如果指定了很多,只有最后一个有效。

    执行docker run命令时,也可以添加-entrypoint参数,会把指定的参数继续传递给ENTRYPOINT,例如:

    ...
    ENTRYPOINT ["echo","foo"]

    然后执行:

    docker run CONTAINER_NAME bar #注意没有echo

    那么,就相当于执行了echo foo bar,最终结果就是

    foo bar

     

  • 相关阅读:
    C# 控件缩写大全+命名规范+示例
    Database Link详解
    DataTable.Compute 方法
    Dotfuscator Professional Edition 4.9.7500.9484 混淆工具破解版+使用教程
    C#中的委托和事件(续)
    Jquery 获取元素内容
    ASP.NET 常用类
    JavaScript动态生成访问方法
    LINQ查询操作符
    HTML乱码问题和header结构
  • 原文地址:https://www.cnblogs.com/loveyouyou616/p/6813050.html
Copyright © 2020-2023  润新知