Open isayme opened 5 years ago
CMD ["executable","param1","param2"] (exec form, this is the preferred form) CMD command param1 param2 (shell form)
官方推荐 exec form.
exec form
shell form 时程序是通过 shell 执行, 导致程序运行时 pid 不是 1 !
shell form
1
kubernetes 在删除 pod 时会先发送信号 TERM 给 pod 的主进程(main process), 进程可以在收到信号后平滑(graceful)退出, 超时(30s)仍未退出的 pod 会被强制删除.
TERM
那么谁是 主进程(main process) ? 就是 pid 为 1 的进程!
也就是说如果 CMD 启动的进程 pid 不是 1 就无法正常收到 TERM 信号并退出, 最后会导致 pod 因超时被 k8s 强制删除.
所以, 赶紧改用 exec form !
Dockerfile CMD 的两种格式
官方推荐
exec form
.原因
shell form
时程序是通过 shell 执行, 导致程序运行时 pid 不是1
!kubernetes 在删除 pod 时会先发送信号
TERM
给 pod 的主进程(main process), 进程可以在收到信号后平滑(graceful)退出, 超时(30s)仍未退出的 pod 会被强制删除.那么谁是 主进程(main process) ? 就是 pid 为
1
的进程!也就是说如果 CMD 启动的进程 pid 不是
1
就无法正常收到TERM
信号并退出, 最后会导致 pod 因超时被 k8s 强制删除.所以, 赶紧改用
exec form
!参考资料