在Docker中,CMD和ENTRYPOINT是兩種不同的指令,用于指定在容器啟動時要執行的命令。
CMD指令用于為容器指定默認的執行命令。它可以有多種不同的格式:
CMD [“executable”,“param1”,“param2”]:以JSON數組的形式指定要執行的命令及其參數。這種格式中,CMD會被解析為一個單獨的命令,如果用戶指定了其他的命令,將會覆蓋CMD。
CMD command param1 param2:以默認的shell格式指定要執行的命令。這種格式下,CMD會被解析為一個命令行,如果用戶指定了其他的命令,將會覆蓋CMD。
ENTRYPOINT指令用于將容器作為可執行程序運行。它也可以有多種不同的格式:
ENTRYPOINT [“executable”, “param1”, “param2”]:以JSON數組的形式指定要作為可執行程序運行的命令及其參數。這種格式下,ENTRYPOINT會被解析為一個單獨的命令,如果用戶指定了其他的命令,將會覆蓋ENTRYPOINT。
ENTRYPOINT command param1 param2:以默認的shell格式指定要作為可執行程序運行的命令。這種格式下,ENTRYPOINT會被解析為一個命令行,如果用戶指定了其他的命令,將會覆蓋ENTRYPOINT。
區別:
CMD是為了提供默認值,如果用戶在運行容器時指定了其他的命令,則會覆蓋CMD。而ENTRYPOINT是要將容器作為可執行程序運行,用戶無法覆蓋ENTRYPOINT。
如果在Dockerfile中同時使用了CMD和ENTRYPOINT,CMD的內容會作為ENTRYPOINT的參數。即CMD指定的命令及參數會被添加到ENTRYPOINT指定的命令之后。
總結:CMD用于指定默認的執行命令,而ENTRYPOINT用于將容器作為可執行程序運行,并且可以與CMD結合使用。