1 command args

  • 如果指定了 containers.command,Dockerfile 中的 ENTRYPOINT 会被覆盖且 CMD 指令被忽略
  • 如果指定了 containers.args,Dockerfile 中的 ENTRYPOINT 继续执行, CMD 指令 被覆盖
ENTRYPOINT CMD command args finally
["/ep1"] [“foo”, “bar”] ep-1 foo bar
["/ep1"] [“foo”, “bar”] ["/ep-2"] ep-2
["/ep1"] [“foo”, “bar”] [“zoo”, “boo”] ep-1 zoo boo
["/ep1"] [“foo”, “bar”] ["/ep-2"] [“zoo”, “boo”] ep-2 zoo boo

2 CMD ENTRYPOINT

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

  • 如果 ENTRYPOINT 使用了 shell 模式,CMD 指令会被忽略。
  • 如果 ENTRYPOINT 使用了 exec 模式,CMD 指定的内容被追加为 ENTRYPOINT 指定命令的参数。
  • 如果 ENTRYPOINT 使用了 exec 模式,CMD 也应该使用 exec 模式。

还有一点需要注意,如果使用 docker run --entrypoint 覆盖了 Dockerfile 中的 ENTRYPOINT , 同时 CMD 指令也会被忽略

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

image-20230410160304323

以上