使用 docker 在 Apple Silicon M1 上构建错误

问题描述 投票:0回答:2


我试图在我的 M1 上使用第三方 cli (plastimatch) 对 Flask 应用程序进行 dockerize。
我使用 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 服务器上的构建运行得很好。

在开发过程中在本地对应用程序进行 docker 化时,有人注意到类似的问题吗?还有解决办法吗?

这里是使用的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/

python docker ubuntu-18.04 apple-silicon
2个回答
0
投票

对我来说,修复方法是安装 Rosetta 2,它包含在 Docker 文档中:https://docs.docker.com/desktop/mac/apple-silicon/#system-requirements

softwareupdate --install-rosetta

0
投票

Slim docker 镜像在 M1 中工作得更好

FROM python:3.11-slim

也试试这个吧

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.