在Docker中,CMD
和ENTRYPOINT
都是用于指定容器啟動時要執行的命令或腳本。它們之間的區別如下:
CMD
:CMD
用于指定容器啟動時要執行的命令。它可以有三種不同的形式:CMD ["executable","param1","param2"]
(使用JSON數組形式):推薦使用這種形式,它會直接執行指定的可執行文件,并傳遞參數。
CMD command param1 param2
(使用命令形式):這種形式會將命令傳遞給shell進行解釋執行。
CMD ["param1","param2"]
(使用JSON數組形式):這種形式會將指定的參數傳遞給ENTRYPOINT指定的可執行文件。
在Dockerfile中,可以使用多個CMD
指令,但只有最后一個CMD
指令會生效。如果容器啟動時沒有指定要執行的命令,將會執行最后一個CMD
指令中指定的命令。
ENTRYPOINT
:ENTRYPOINT
用于指定容器啟動時要執行的可執行文件。它可以有兩種不同的形式:ENTRYPOINT ["executable", "param1", "param2"]
(使用JSON數組形式):推薦使用這種形式,它會直接執行指定的可執行文件,并傳遞參數。
ENTRYPOINT command param1 param2
(使用命令形式):這種形式會將命令傳遞給shell進行解釋執行。
在Dockerfile中,只能使用一個ENTRYPOINT
指令。如果同時存在CMD
指令,CMD
中的參數將會作為ENTRYPOINT
指定的可執行文件的參數進行傳遞。
總的來說,CMD
用于指定容器啟動時要執行的命令參數,而ENTRYPOINT
用于指定容器啟動時要執行的可執行文件。可以將ENTRYPOINT
看作是容器的入口點,而CMD
則是對ENTRYPOINT
指定的可執行文件的參數進行補充。