tokioで作ったサーバーをdockerで起動すると終了が遅くなるときの対処法
この記事はZennにも投稿しています#概要
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を使ってタスクを完了させます。