dockerfile——CMD和ENTRYPOINT总结

CMD和ENTRYPOINT主要由两种语法:

(1)shell语法:
CMD command param1 param2
例如: CMD echo “cmd”
(2)可执行文件加参数的形式
CMD [“executable”,“param1”,“param2”]
例如: CMD [“echo”,“cmd”]

CMD和ENTRYPOINT区别之一是CMD会被docker run最后的附加的command覆盖,ENTRYPOINT则不会被覆盖。
例如:docker run zz1 echo “hi”

当CMD和ENTRYPOINT同时出现,结合两种语法加上docker run有没有附加command一共有八种情况,如下:

情况一:
ENTRYPOINT echo “e”
CMD echo “c”
docker run不附加command
输出结果: e
情况二:
ENTRYPOINT echo “e”
CMD echo “c”
docker run附加command(echo “hi”)
输出结果: e
两种情况如图:
dockerfile——CMD和ENTRYPOINT总结_第1张图片
dockerfile——CMD和ENTRYPOINT总结_第2张图片
情况三:
ENTRYPOINT [“echo”,“e”]
CMD echo “c”
docker run不附加command
输出结果: e /bin/sh -c echo c
情况四:
ENTRYPOINT [“echo”,“e”]
CMD echo “c”
docker run附加command(echo “hi”)
输出结果: e echo hi
两种情况如图:
dockerfile——CMD和ENTRYPOINT总结_第3张图片
dockerfile——CMD和ENTRYPOINT总结_第4张图片
情况五:
ENTRYPOINT echo e
CMD [“echo”,“c”]
docker run不附加command
输出结果: e
情况六:
ENTRYPOINT echo e
CMD [“echo”,“c”]
docker run不附加command(echo “hi”)
输出结果: e
两种情况如图:
dockerfile——CMD和ENTRYPOINT总结_第5张图片
dockerfile——CMD和ENTRYPOINT总结_第6张图片
情况七:
ENTRYPOINT [“echo”,“e”]
CMD [“echo”,“c”]
docker run不附加command
输出结果: e echo c
情况八:
ENTRYPOINT [“echo”,“e”]
CMD [“echo”,“c”]
docker run不附加command(echo “hi”)
输出结果: e echo hi
两种情况如图:
dockerfile——CMD和ENTRYPOINT总结_第7张图片
dockerfile——CMD和ENTRYPOINT总结_第8张图片

总结:

(1)ENTRYPOINT和CMD两个命令的先后顺序无关;
(2)当ENTRYPOINT使用shell语法时,无论CMD使用什么语法以及docker run有没有附加command,都只执行ENTRYPOINT
(3)当ENTRYPOINT使用可执行文件加参数的语法时,分两种情况:
    (a)docker run没有附加command:无论CMD使用什么语法,CMD指令的内容会作 为参数传递给ENTRYPOINT;
    (b)docker run附加了command:无论CMD使用什么语法,CMD指令会被docker run 中的command覆盖,command作为参数传递给ENTRYPOINT。

你可能感兴趣的:(docker,dockerfile)