--- tags : docker --- # Docker Graceful Shutdown 有時候特定的 request不能被重啟的動作中斷,例如幫顧客購款,或是需要寫入連續資料的情境,在執行過程中被中斷會導致資料一致性的問題。 我們可以在 docker-compose加入一些設定,避免 request只做到一半就被 restart。 ## Docker container update 以下是 docker swarm在 update container的流程:  當我們更新 container時,docker swarm會先送出一個命令 `SIGTERM`通知 container即將被重啟,然後等待 10秒(預設值)接著送出 `SIGKILL`,此時 container正式被 kill掉。 * SIGTERM : 通知 container即將結束的訊號 * SIGKILL : 如果在指定的等待時間內沒有結束,就會改送出 SIGKILL 訊號,此時作業系統就會嘗試將應用程式「強制關閉」 # 更改 Docker stop_grace_period參數 可以透過 [stop_grace_period](https://docs.docker.com/compose/compose-file/compose-file-v2/)決定從 `SIGTERM`到 `SIGKILl`要等待多久,沒有特別設置的話是 10秒。 Example : `stop_grace_period : 1s` or `stop_grace_period: 1m30s`  # Program.cs新增 shutdown event 以下方法同時支援 SIGTERM 跟 ctrl + c (SIGQUIT) Event * .Net 6  * .Net 6以下的版本  # Reference [當 .NET Core 執行在 Linux 或 Docker 容器中如何優雅的結束](https://blog.miniasp.com/post/2020/07/22/How-to-handle-graceful-shutdown-in-NET-Core)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up