Docker构建失败:requirements.txt安装jaxlib wheel包不兼容问题排查
解决Docker构建中pip安装依赖失败的问题
问题根源
报错里的jaxlib-0.3.22+cuda11.cudnn805-cp37-cp37m-manylinux2014_x86_64.whl是为Python 3.7编译的包(文件名中的cp37对应Python3.7),但你使用的是Python3.8基础镜像,版本不兼容。同时旧版pip(22.0.4)对包版本的识别存在缺陷,导致拉取了错误的jaxlib版本。这个jaxlib是你requirements.txt中某个依赖(大概率是tensorflow-datasets==4.6.0)间接引入的。
修复步骤
1. 先升级pip再安装依赖
修改Dockerfile,在安装依赖前将pip升级到最新版本,确保它能正确识别适配Python3.8的包:
FROM python:3.8 ADD requirements.txt / # 先升级pip,避免版本兼容问题 RUN pip install --upgrade pip && pip install -r /requirements.txt ADD text_classification.py / ENV PYTHONUNBUFFERED=1 CMD [ "python", "./text_classification.py" ]
2. 手动指定jaxlib的兼容版本(可选)
如果升级pip后仍报错,直接在requirements.txt中添加适配Python3.8的jaxlib版本:
tensorflow-datasets==4.6.0 vega-datasets==0.9.0 scikit-learn==1.0.2 autograd==1.5 numpy==1.21.6 # 添加适配Python3.8的jaxlib版本 jaxlib==0.3.22
如果需要CUDA支持,可以查找对应cp38的cuda版本包,但升级pip后通常会自动匹配正确版本,优先尝试第一步即可。
3. 排查额外引入的依赖(可选)
报错中出现了en-core-web-sm的安装流程,但你的requirements.txt中并未声明该包,说明是其他依赖间接引入的。如果你的代码不需要这个spaCy模型,可以通过依赖树排查引入源头,或者添加对应版本的spaCy以匹配模型版本。
验证修改
完成修改后重新执行构建命令:
docker build . -f Dockerfile.txt
内容的提问来源于stack exchange,提问作者VS Puzzler
相关产品推荐
相关产品推荐

