uvicorn api:app --host 0.0.0.0 --port 7777容器运行失败
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
的内容贴出来我帮你确认。