tokioで作ったサーバーをdockerで起動すると終了が遅くなるときの対処法

作成:2023/11/18 0:00:00

更新:2023/11/18 0:00:00

この記事は、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 — Docker-docs-ja 24.0 ドキュメント

docs.docker.jp

ここに書かれているように、docker stopが実行されるとプログラムにSIGTERMが送信されるのでtokio::signalを使ってそれを受け取り、tokio::selectを使ってタスクを完了させます。
©nazo6

nazo6 knowledge