docker logs pycorrector-container-gpu
你這個報錯的核心是:
ERROR: Error loading ASGI app, Could not import module "api".
這說明:
uvicorn api:app
沒有找到api.py
文件,或者沒法導入app
對象。
🔍 一步步排查你的命令問題
你的 docker run
命令如下(你寫得有點亂,我先整理成正確格式):
docker run -d \--name pycorrector-container-gpu \--gpus "device=1" \-v /home/slx/pycorrector:/app/pycorrector \-p 7777:7777 \pycorrector:v2 \uvicorn api:app --host 0.0.0.0 --port 7777
? 問題出在這里:
你的代碼實際在容器路徑:
/app/pycorrector/api.py
但你運行 uvicorn api:app
的時候,默認是在 /
根目錄下執行的,這個目錄下并沒有 api.py
,所以報錯:
Could not import module "api"
? 正確命令:加上 -w
參數,指定工作目錄!
docker run -d \--name pycorrector-container-gpu \--gpus "device=1" \-v /home/slx/pycorrector:/app/pycorrector \-w /app/pycorrector \-p 7777:7777 \pycorrector:v2 \uvicorn api:app --host 0.0.0.0 --port 7777
說明:
-w /app/pycorrector
表示在容器中以這個路徑作為“當前目錄”執行命令- 所以
api:app
會去/app/pycorrector/api.py
找app = FastAPI()
,就不會報錯了
? 檢查路徑是否正確
如果你不確定 /app/pycorrector/api.py
是否真的存在,可以先進入容器驗證:
docker exec -it pycorrector-container-gpu bash
ls /app/pycorrector/api.py
🧪 快速測試
你也可以先用交互模式進去看看:
docker run -it --rm \--gpus "device=1" \-v /home/slx/pycorrector:/app/pycorrector \-w /app/pycorrector \pycorrector:v2 \bash
然后在容器中手動運行:
uvicorn api:app --host 0.0.0.0 --port 7777
如果能成功,就說明你的 Docker 鏡像和代碼都沒問題,只是路徑設置錯了。
? 完整總結:你只需這樣運行
docker run -d \--name pycorrector-container-gpu \--gpus "device=1" \-v /home/slx/pycorrector:/app/pycorrector \-w /app/pycorrector \-p 7777:7777 \pycorrector:v2 \uvicorn api:app --host 0.0.0.0 --port 7777
之后用瀏覽器訪問:http://localhost:7777/docs 即可。
如你不確定 api.py
結構或文件是否正確,可以把 api.py
的內容貼出來我幫你確認。