自定义Entrypoint镜像执行docker restart时Docker发送的信号咨询
问题解答
当执行docker restart命令时,Docker的停止流程分为两步:
- 首先向容器内的PID 1进程(也就是你的自定义Entrypoint脚本/程序)发送**
SIGTERM**信号,通知进程优雅退出; - 如果等待10秒(Docker默认的停止超时时间)后,进程仍未退出,Docker会发送**
SIGKILL**信号强制终止容器,这就是你看到“10秒后强制终止”的原因。
而你用docker run -it启动容器并按下C-c时,终端会向容器内的前台进程发送SIGINT信号,你的Entrypoint应该已经处理了这个信号,所以能在10秒内正常停止容器。
要解决这个问题,你需要在自定义Entrypoint中添加对SIGTERM信号的处理逻辑,让它收到该信号时,能优雅地停止所有子服务并退出,这样docker restart时就不会触发强制终止了。
内容的提问来源于stack exchange,提问作者user3054986
相关产品推荐
相关产品推荐

