[英]Build Error on apple silicon M1 with docker
我试图在我的 M1 上使用第三方 cli(plastimatch)对接 flask 应用程序。
我使用 ubuntu:18.04 作为基础镜像。 较新版本的构建将失败,并显示错误消息“未找到安装候选者”。 我注意到的第一件奇怪的事情是,完全相同的构建将在 linux 服务器上成功。
我使用本地 venv 来完成应用程序,当我开始对所有内容进行 dockerize 处理时,我收到以下错误:
#16 22.37 注意:此错误源自子进程,可能不是 pip 的问题。
#16 22.37 错误:pylibjpeg-libjpeg 的构建轮失败
#16 22.37 无法构建 pylibjpeg-openjpeg pylibjpeg-libjpeg
#16 22.37 错误:无法为 pylibjpeg-openjpeg、pylibjpeg-libjpeg 构建轮子,这是安装基于 pyproject.toml 的项目所必需的
这些 python 包是处理图像的不同 C++ 库的包装器。 本地构建失败,我们的 linux 服务器上的构建运行良好。
在开发中本地化应用程序时,有没有人注意到类似的问题? 有什么解决办法吗?
这里是使用过的 Dockerfile 和 requirements.txt 的参考(目前缺少特定版本):
FROM ubuntu:18.04 as base
RUN apt-get update -y && apt-get install -y && apt-get upgrade -y
RUN apt-get install -y software-properties-common
RUN add-apt-repository ppa:deadsnakes/ppa
RUN apt-get install -y python3.8 python3-pip
RUN rm /usr/bin/python3 && ln -s /usr/bin/python3.8 /usr/bin/python3
RUN apt-get install -y \
plastimatch \
zlib1g \
cmake
WORKDIR /app
COPY requirements.txt requirements.txt
RUN python3 -m pip install -U --force-reinstall pip
RUN pip3 install --upgrade pip setuptools wheel
RUN pip3 install -r requirements.txt
ENV LC_ALL=C.UTF-8
ENV LANG=C.UTF-8
FROM base as upload-dev
RUN echo "Building dev version"
COPY requirements_dev.txt requirements_dev.txt
RUN pip3 install -r requirements_dev.txt
COPY . .
python-dotenv
cython
pynrrd
flask-cors
Flask
Werkzeug
httplib2
numpy
pydicom
highdicom
dicomweb-client
我可以追踪错误。 问题是一些第三方库缺少轮子。 如果找不到轮子,则编译器将获取并安装源代码。 在安装以 C++ 为核心的库期间,这在我的机器上崩溃了。 解决此问题的一种简单方法是直接使用 linux AMD64 映像。
FROM --platform=linux/amd64 $YOUR_BASE_IMAGE
这会有点慢,但对于大多数开发环境来说已经足够了。 详解: https://pythonspeed.com/articles/docker-build-problems-mac/
对我来说,解决方法是安装 Rosetta 2,它包含在 Docker 文档中: https://docs.docker.com/desktop/mac/apple-icon/#system-requirements
softwareupdate --install-rosetta
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.