在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
指定的可执行文件的参数进行补充。