ENTRYPOINT
的exec和shell形式:
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2
CMD
指令有三种形式:
CMD ["executable","param1","param2"]
(exec形式,这是首选形式)CMD ["param1","param2"]
(作为ENTRYPOINT 的默认参数)CMD command param1 param2
(shell形式)
CMD 与 ENTRYPOINT都是用于指定启动容器执行的命令,区别在于:
- 当docker run 命令中有参数时,守护进程会忽略CMD命令。
- 使用ENTRYPOINT指令不会忽略,并且会接收docker run 参数附加到命令行中。
一般用法:
通过CMD来接收docker run 参数,然后把参数传递给ENTRYPOINT执行,使用ENTRYPOINT
作为入口,能保证默认启动应用
应避免shell模式启动容器,因为无法将 kill -15 (SIGTERM)信号传递给业务程序,进而执行优雅退出。shell 进程默认不会处理 SIGTERM 信号,自己不会退出,也不会将信号传递给子进程,导致业务进程不会触发停止逻辑。