📄

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

2023/11/18に公開

概要

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() => {}
    );
}

解説

https://docs.docker.jp/engine/reference/commandline/stop.html

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

この記事は https://note.nazo6.dev/blog/rust-server-docker-stop-slow とのクロスポストです。

GitHubで編集を提案

Discussion