📄
tokioで作ったサーバーをdockerで起動すると終了が遅くなるときの対処法
概要
axumなどを作ってRustでサーバーを作るとdocker compose stop
などが微妙に遅くてイライラだったのでそれを解決する方法です。
コード
async fn main() {
...なんかの処理
...
let mut sigterm = tokio::signal::unix::signal(tokio::signal::unix::SignalKind::terminate()).unwrap();
tokio::select!(
_ = tart_server() => {},
_ = sigterm.recv() => {}
);
}
解説
ここに書かれているように、docker stop
が実行されるとプログラムにSIGTERM
が送信されるのでtokio::signal
を使ってそれを受け取り、tokio::select
を使ってタスクを完了させます。
この記事は https://note.nazo6.dev/blog/rust-server-docker-stop-slow とのクロスポストです。
Discussion