有一个应用程序在 docker 容器中运行。什么时候docker stop %container_id%
发送容器接收SIGTERM
。此信号在 golang 应用程序内部通过在退出前执行清理代码来处理。在这种情况下,代码是退出前的单个日志语句。
是否保证容器在这条语句执行前不会消失?
如果是,它是否适用于其他信号?
如果没有,是否有适用的信号?
func main() {
http.HandleFunc("/", func(rw http.ResponseWriter, r *http.Request) {
fmt.Fprintln(rw, "chirtkem mudila")
})
go func() {
if err := http.ListenAndServe(":8080", nil); err != nil {
log.Fatal(err)
}
}()
interupt := make(chan os.Signal, 1)
signal.Notify(interupt, syscall.SIGTERM, syscall.SIGINT)
<-interupt
log.Println("graceful shutdown") // is it guaranteed to execute before container ceases to exist?
}
神不在的星期二
相关分类