nazo6 noteblog

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

作成:2023/11/18

更新:2023/11/18

この記事は、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を使ってタスクを完了させます。