📄
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