栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

cmd和dockefile中的入口点之间的区别

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

cmd和dockefile中的入口点之间的区别

不完全是:

ENTRYPOINT
配置将作为可执行文件运行的容器。
因此它 总是 执行的(或者默认
/bin/sh -c
是)。

ENTRYPOINT ["executable", "param1", "param2"] (exec form, preferred)ENTRYPOINT command param1 param2 (shell form)

命令行参数to

docker run <image>
将以exec形式附加在所有元素之后
ENTRYPOINT
,并将覆盖使用CMD指定的所有元素。

shell形式阻止使用任何

CMD
或运行命令行参数,但是具有以下缺点:您
ENTRYPOINT
将作为的子命令启动,该子命令
/bin/sh-c
不会传递信号。
这意味着可执行文件将不是容器的PID 1,并且将不会接收Unix信号,因此您的可执行文件将不会从接收到SIGTERM
docker stop<container>

您可以将其

CMD
作为参数查看
ENTRYPOINT

如果没有入口点(默认命令为“
/bin/sh -c
”),则
CMD
可以包含可执行文件。
如果
ENTRYPOINT
已经运行了可执行文件,则CMD参数是该命令的参数(如果
docker run
使用时不带附加参数)。


随着

dockerstart
,如中提到的问题1437时,
ENTRYPOINT
被执行,但只有从参数
CMD
(所以
CMD
被使用,但你不能用你自己的命令行参数覆盖它)。
如果你想使用CMD,你需要
docker run
,没有
docker start

实际上,最近有一个正在进行的PR(PR
19746),它允许docker
start命令使用可选的

--cmd
-c
)标志来指定要使用的cmd,而不是来自cmd / entrypoint的默认cmd。


该官方Dockerfile文档现在有一个部分“
了解如何CMD和入口点互动 ”:

  • Dockerfile应该至少指定
    CMD
    ENTRYPOINT
    命令之一。
  • ENTRYPOINT
    使用容器作为可执行文件时应定义。
  • CMD
    应该用作
    ENTRYPOINT
    在容器中定义命令或执行临时命令的默认参数的方式。
  • CMD
    使用替代参数运行容器时,将被覆盖。

这意味着,如果您的Dockerfile包含:

  • CMD

    • 如果否
      ENTRYPOINT
      :错误,不允许
    • ENTRYPOINT exec_entry p1_entry
      手段
      /bin/sh -c exec_entry p1_entry
    • ENTRYPOINT ["exec_entry", "p1_entry"]
      手段
      exec_entry p1_entry
    • CMD ["exec_cmd", "p1_cmd"]
      (一个命令,一个参数)

    • 如果没有

      ENTRYPOINT
      exec_cmd p1_cmd

    • ENTRYPOINT exec_entry p1_entry
      手段
      /bin/sh -c exec_entry p1_entryexec_cmd p1_cmd
    • ENTRYPOINT ["exec_entry", "p1_entry"]
      手段
      exec_entry p1_entryexec_cmd p1_cmd
    • CMD ["p1_cmd", "p2_cmd"]

    • 如果否

      ENTRYPOINT
      p1_cmd p2_cmd

    • ENTRYPOINT exec_entry p1_entry
      手段
      /bin/sh -c exec_entry p1_entryp1_cmd p2_cmd
      (好)
    • ENTRYPOINT [“exec_entry”, “p1_entry”]
      手段
      exec_entry p1_entry p1_cmdp2_cmd
    • CMD exec_cmd p1_cmd

    • 如果否

      ENTRYPOINT
      /bin/sh -c exec_cmd p1_cmd

    • ENTRYPOINT exec_entry p1_entry
      手段
      /bin/sh -c exec_entry p1_entry/bin/sh -c exec_cmd p1_cmd
    • ENTRYPOINT [“exec_entry”, “p1_entry”]
      手段
      exec_entry p1_entry/bin/sh -c exec_cmd p1_cmd



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/435805.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号