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