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 |
CMD ENTRYPOINT
我们大概可以总结出下面几条规律:
- 如果 ENTRYPOINT 使用了 shell 模式,CMD 指令会被忽略。
- 如果 ENTRYPOINT 使用了 exec 模式,CMD 指定的内容被追加为 ENTRYPOINT 指定命令的参数。
- 如果 ENTRYPOINT 使用了 exec 模式,CMD 也应该使用 exec 模式。
还有一点需要注意,如果使用 docker run --entrypoint
覆盖了 Dockerfile 中的 ENTRYPOINT , 同时 CMD 指令也会被忽略
真实的情况要远比这三条规律复杂,好在 docker 给出了官方的解释,如下图所示: