Skip to content

[已解決] uvicorn 在容器中自動被關閉 - HTTP connection lost. Shutting down, exit 0

Last Updated on 2023-07-04 by Clay

問題描述

今天我在使用 podman 建立一個 container(來自 FastAPI 的 image)來運行我的 FastAPI 時,我發現了只要我的使用者登出,或是過一陣子沒使用 HTTP post 去打架設起來的 API 的話,過了一陣子容器會自己停止服務。

使用 podman ps 去看的時候,會看到容器已經關閉,最後的狀態是 exit 0 —— 意味著是正常地結束了服務,並沒有碰到奇怪的錯誤訊息。

由於我的服務是使用 python 的 FastAPI 所啟動的,所以使用 logging debug 去追問題,只看到:

HTTP connection lost.
Shutting down...


上網查詢了 Stackoverflow 網友們的討論,最終有兩個方法確實讓我解決了容器裡的服務自動關閉的問題。


Solutions

  1. 由於我的 ASGI 服務是使用 uvicorn,所以在使用 uvicorn 時多添加一個變數 --timeout-keep-alive 99999999。我設了一個很大的數值讓服務不會自動關閉(default 是 5 秒),這樣一來服務真的就不會自動關閉了。然而,這是一個幾乎被所有同事吐槽是奇怪解決方法的解決方法
  2. 更新 podman。比方說在 Ubuntu 上現在似乎是 3.x.x,但是實際上的版本號已經可以來到 4.x.x 了。更新它並重新啟動服務。

References


Read More

Tags:

Leave a Reply