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

Docker多阶段构建报错:uvicorn可执行文件未找到求助

问题原因

报错uvicorn: executable file not found in $PATH的核心原因有两个:

  1. 多阶段构建时,仅复制了base阶段的/src目录,但Python包(包括uvicorn)是安装在base镜像的Python系统目录中,并未同步到alpine镜像里,导致alpine镜像中根本没有uvicorn可执行文件。
  2. docker-compose的卷挂载路径与容器内工作目录不匹配,本地./src被挂载到/usr/src/app,但容器工作目录是/src,代码路径混乱。
解决步骤

1. 修正Dockerfile:同步Python依赖包

修改多阶段构建逻辑,将base阶段安装的Python包复制到alpine镜像中。推荐用pip install --target把包安装到指定目录,方便后续复制:

# pull official base image
FROM python:3.11-slim AS base

# set working directory
WORKDIR /src

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

RUN apt-get update && apt-get install -y git

RUN pip install --upgrade pip
COPY ./requirements.txt .
# 将依赖安装到src/packages目录,方便后续复制
RUN pip install --target ./packages -r requirements.txt


FROM python:3.11-alpine

WORKDIR /src

# 从base阶段复制安装好的依赖包
COPY --from=base /src/packages /src/packages
# 设置PYTHONPATH,让Python能找到packages里的依赖
ENV PYTHONPATH="/src/packages:$PYTHONPATH"

# 复制本地代码到容器工作目录
COPY . .

2. 修正docker-compose.yml:对齐挂载路径

将卷挂载路径调整为与容器工作目录一致,避免代码路径混乱:

version: '3.8'

services:

  web:
    build:
      context: .
      dockerfile: Dockerfile.test
    command: uvicorn app.main:app --reload --workers 1 --host 0.0.0.0 --port 8000
    volumes:
      - ./src:/src  # 对齐容器内的WORKDIR路径
    ports:
      - 8000:8000

额外说明

如果你的requirements.txt中有依赖需要系统库支持(比如涉及编译的包),alpine镜像可能缺少对应的依赖,此时需要在alpine阶段安装必要的系统包,例如:

FROM python:3.11-alpine
# 安装常用依赖,根据实际需求调整
RUN apk add --no-cache gcc musl-dev

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 03:01:09