繁体   English   中英

使用 docker 在苹果硅 M1 上构建错误

[英]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

更新:2022 年 7 月 1 日

我可以追踪错误。 问题是一些第三方库缺少轮子。 如果找不到轮子,则编译器将获取并安装源代码。 在安装以 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM