You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多阶段Docker部署Python应用:uvicorn命令找不到问题排查

问题:Python Web应用多阶段Docker构建的依赖执行异常

我通过Jenkins结合多阶段Docker构建Python Web应用,流程为:在Jenkins的builder阶段中,执行pip install --target deps将所有依赖安装到deps目录,随后将该目录复制到Docker镜像,并设置ENV PYTHONPATH=deps:.。但启动镜像运行Python应用时,执行PATH中的命令(如uvicorn)会报错sh: uvicorn not found,即使添加deps/bin到PATH仍无效。直接在镜像中安装虚拟环境则可解决该问题。

相关代码

Dockerfile

FROM Python:3.9-slim as base
ENV  PYTHONPATH=deps:.


FROM base as builder 

RUN --mount=type=cache,id=apt-cache,target=/var/cache/apt,sharing=locked \
    --mount=type=cache,id=apt-lib,target=/var/lib/apt,sharing=locked \
    apt-get update && apt-get --no-install-recommends install -y build-essential

FROM base 

COPY deps deps
COPY app app

CMD [uvicorn, app.main:app, --host 0.0.0.0, --port 8000]

Makefile

build:
       docker build --tag app:builder .

deps: clean
         mkdir deps
         pip install -r requirements.txt --target deps

clean: 
         rm  -rf deps

Jenkins任务步骤

  • 触发构建builder
  • 触发builder执行Makefile的deps阶段
  • Docker构建应用镜像

项目结构

│   requirements.txt
├── app
│   ├── models
│   │   └── registry
│   ├── api_router.py
│   ├── configuration.py
│   ├── main.py
│   ├── schemas
│   │ 
│   └── tests
│       └── unit
└── docs

补充异常细节

仅将deps目录添加到ENV PYTHONPATH=deps:.无效,执行pip list -v无法找到依赖,但pip freeze能列出依赖。


内容的提问来源于stack exchange,提问作者Nikolai Kl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 14:25:22