首页 > 解决方案 > 如果我从具有自己的入口点/cmd 的图像构建并运行带有入口点/cmd 的 docker 会发生什么?

问题描述

假设我有一个带有入口点/cmd 的基础映像,并且基于它构建的新层也有一个入口点/cmd。

例如:

根据:

    entrypoint ["base-start.sh"]
    cmd ["-initialize"]

假设他们将输出一个时间戳和类似的消息

    2018-08-31 15:00:00 base image initializing(2 min remaining).
    2018-08-31 15:02:00 base image initialized.

新层:

    cmd /layer-start.sh

假设输出:

    2018-08-31 15:00:00 layer cmd executed.

现在我想知道他们是否都会被执行,如果他们这样做,执行顺序是什么?

结果是哪一个?

  1. 基本 cmd 和层 cmd 并行启动。

    2018-08-31 15:00:00 base image initializing(2 min remaining).
    2018-08-31 15:00:00 layer cmd executed.
    2018-08-31 15:02:00 base image initialized.
    
  2. 层 cmd 在基本 cmd 退出后启动。

    2018-08-31 15:00:00 base image initializing(2 min remaining).
    2018-08-31 15:02:00 base image initialized.
    2018-08-31 15:02:01 layer cmd executed.
    
  3. 基础映像 cmd 被覆盖。

    2018-08-31 15:00:00 layer cmd executed.
    

如果基础映像直接使用 cmd 而不是入口点 + cmd,那么 senario 会有所不同吗?

先感谢您。

标签: linuxdockercmddocker-imagedocker-build

解决方案


根据文档

一个 Dockerfile 中只能有一个 CMD 指令。如果您列出多个 CMD,则只有最后一个 CMD 才会生效。

对于ENTRYPOINT

只有 Dockerfile 中的最后一条 ENTRYPOINT 指令才会生效。

如果您结合CMD并查看文档ENTRYPOINT中的表格以供参考:

在此处输入图像描述

此外,这也已回答here


推荐阅读