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 信号,自己不会退出,也不会将信号传递给子进程,导致业务进程不会触发停止逻辑。