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

Docker构建ML模型镜像失败:pip安装依赖报错求助

Docker容器化机器学习模型时pip安装依赖失败问题解决

问题场景

执行docker build -t <file-name> <location>命令构建镜像时,pip安装requirements.txt依赖失败,报错提示subprocess-exited-with-error,具体错误信息如下:

22.34   note: This error originates from a subprocess, and is likely not a problem with pip.
22.34 error: subprocess-exited-with-error
22.34 
22.34 × pip subprocess to install build dependencies did not run successfully.
22.34 │ exit code: 1
22.34 ╰─> See above for output.
22.34 
22.34 note: This error originates from a subprocess, and is likely not a problem with pip.
22.36 
22.36 [notice] A new release of pip is available: 23.0.1 -> 23.3.1
22.36 [notice] To update, run: pip install --upgrade pip
------
Dockerfile:4
--------------------
   2 |     COPY . /app
   3 |     WORKDIR /app 
   4 | >>> RUN pip install -r requirements.txt 
   5 |     CMD streamlit run viz_app.python
--------------------
ERROR: failed to solve: process "/bin/sh -c pip install -r requirements.txt" did not complete successfully: exit code: 1

当前Dockerfile内容

FROM python:3.11-alpine
COPY . /app
WORKDIR /app 
RUN pip install -r requirements.txt 
CMD streamlit run viz_app.python

已尝试的解决方法

  • 添加RUN pip install --upgrade pip语句升级pip
  • 更换requirements.txt中包的版本

requirements.txt内容

numpy
pandas
streamlit
scikit-learn
matplotlib
opencv-python
tensorflow
segmentation-models

问题原因及解决方案

核心原因

使用的python:3.11-alpine镜像基于musl libc,而非常见的glibc,很多带C扩展的Python包(如numpy、scikit-learn、opencv-python、tensorflow)在alpine上需要本地编译,但镜像默认缺少编译工具链和必要的系统依赖库,导致安装失败。

方案1:修改alpine镜像,补充依赖和编译工具

更新Dockerfile,添加编译工具和系统依赖,安装完成后清理工具以减小镜像体积:

FROM python:3.11-alpine

# 安装编译工具和系统依赖(适配numpy、opencv、scikit-learn等包)
RUN apk add --no-cache gcc g++ musl-dev linux-headers \
    libjpeg-turbo-dev libpng-dev freetype-dev pkgconfig \
    openblas-dev

# 升级pip
RUN pip install --upgrade pip

COPY . /app
WORKDIR /app 

# 安装Python依赖
RUN pip install -r requirements.txt 

# 清理编译工具,减小镜像体积
RUN apk del gcc g++ musl-dev linux-headers pkgconfig

# 修正启动命令的文件名后缀(应为.py而非.python)
CMD streamlit run viz_app.py

方案2:换用Debian-based的Python镜像(更推荐)

使用python:3.11-slim镜像(基于Debian),大部分Python包有预编译的wheel文件,无需本地编译,安装更高效且兼容性更好:

FROM python:3.11-slim

# 安装opencv等依赖需要的系统库
RUN apt-get update && apt-get install -y --no-install-recommends \
    libgl1-mesa-glx libglib2.0-0 \
    && rm -rf /var/lib/apt/lists/*

# 升级pip
RUN pip install --upgrade pip

COPY . /app
WORKDIR /app 

# 安装Python依赖
RUN pip install -r requirements.txt 

# 修正启动命令的文件名后缀
CMD streamlit run viz_app.py

额外注意事项

  1. 启动命令中的viz_app.python应为viz_app.py,这是常见的Python脚本后缀错误,需修正。
  2. segmentation-models依赖tensorflow,确保requirements.txt中tensorflow的版本与segmentation-models兼容,若仍有问题可指定具体版本(如tensorflow==2.15.0、segmentation-models==1.0.1)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 00:26:31