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

Alpine基础镜像构建Docker镜像时安装Matplotlib卡住如何解决

问题根因

  • 基础镜像选型不当:你使用的Alpine发行版默认采用musl libc作为系统C运行库,而numpy、matplotlib等Python科学计算包官方提供的预编译wheel包仅适配glibc生态。pip安装时无法找到适配musl的预构建包,会触发源码编译流程,整个过程需要下载大量编译依赖、执行长时间编译操作,就会表现为卡住无响应。
  • 依赖配置错误:requirements.txt中sklearn==0.0是无效配置,sklearn包早已废弃,当前正确的机器学习包名为scikit-learn,你所写的0.0版本仅为占位空包,无法提供实际功能。
  • Dockerfile冗余配置(非卡住原因,属于额外错误):Dockerfile中仅最后一个CMD指令会生效,你写的两个CMD会导致前一个启动app.py的指令被直接忽略,容器启动后只会运行web.py。

修复方案

首选方案(推荐)

更换为debian系Python官方镜像,直接使用预编译的wheel包,安装速度快、稳定性高:

  1. 修正requirements.txt,替换无效的sklearn依赖:
flask
matplotlib==3.3.4
numpy==1.20.1
scikit-learn==0.24.1
  1. 修正Dockerfile内容:
# 选用glibc生态的Python slim镜像,体积小且适配科学计算包
FROM python:3.8-slim

WORKDIR /usr/src/app

# 安装matplotlib运行所需的系统依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
    libfreetype6-dev \
    libpng-dev \
    && rm -rf /var/lib/apt/lists/*

COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

# 如需同时运行两个Python进程,可编写启动脚本后在此处调用,示例:
# CMD ["bash", "./start.sh"]
CMD ["python3", "./web.py"]

备选方案(坚持使用Alpine的情况)

需提前安装全部编译依赖,编译耗时较长,镜像体积更大:
在Dockerfile的pip install步骤前添加编译依赖安装指令:

RUN apk add --no-cache gcc gfortran musl-dev freetype-dev libpng-dev openblas-dev

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:51:03