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