Mac端运行Win10项目docker-compose报Rust编译器依赖安装错误
问题根因
- Docker镜像构建是完全隔离的流程,宿主机安装的Rust、Conda环境都不会进入构建上下文,之前在Mac宿主机配置Rust无法解决镜像内的编译报错。
- M系列芯片的Mac默认构建arm64架构镜像,锁定版本的
tokenizers==0.10.3、sentencepiece==0.1.96没有提供arm64架构下Python3.7对应的预编译安装包,pip会拉取源码执行本地编译,而编译tokenizers必须依赖Rust编译器,工具链缺失就会抛出Rust相关报错。 - 依赖列表中混入了Windows专属包
wincertstore==0.2,该包仅支持Windows系统,在Linux容器环境下安装会触发异常,属于跨系统迁移未清理的冗余依赖。
修复方案
两种方案可任选,优先选择第一种,改动最小,和原Windows环境的依赖版本完全一致,不会出现兼容性问题。
方案1:构建amd64架构镜像(推荐)
执行docker compose前在终端声明Docker默认构建amd64架构镜像,运行时通过Mac自带的Rosetta 2转译执行,所有依赖都可以直接拉取预编译包,无需本地编译:
export DOCKER_DEFAULT_PLATFORM=linux/amd64
如果需要长期生效,直接在docker-compose.yml对应服务配置中增加平台声明即可:
services: 你的微服务名: platform: linux/amd64 # 其余原有配置保持不变
配置完成后正常执行docker compose up -d即可启动服务。
方案2:原生构建arm64架构镜像
如果需要运行原生arm64版本的容器,需要做两处调整:
- 编辑
requirements.txt,删除wincertstore==0.2这一行Windows专属依赖。 - 修改Dockerfile,在安装Python依赖前预装Rust编译工具链和必要系统依赖,修改后的内容如下:
FROM python:3.7-slim-buster WORKDIR /app COPY ./requirements.txt /app/requirements.txt RUN apt-get update \ && apt-get install -y --no-install-recommends gcc curl musl-dev \ && curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* ENV PATH="/root/.cargo/bin:${PATH}" RUN pip install --upgrade pip RUN pip install -r /app/requirements.txt \ && rm -rf /root/.cache/pip COPY . /app/
修改完成后执行docker compose build --no-cache清除旧构建缓存重新打包镜像即可。
内容的提问来源于stack exchange,提问作者Francisco Aguilera
相关产品推荐
相关产品推荐

