You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apple Silicon环境下基于micromamba的Docker构建卡在Transaction starting步骤

Apple Silicon(M2 MacBook Pro)构建VEBA Docker镜像问题

问题背景

我用M2处理器的MacBook Pro构建Docker镜像,之前在Intel Mac上多次成功构建。目前试过两种方式:

  • 通过Rosetta模拟Intel运行iTerm2(arch命令显示i386)
  • 直接用原生arm64环境(arch命令显示arm64)

构建命令:

docker build --build-arg ENV_NAME=${ENV_NAME} -t ${TAG} -f Dockerfile ../../

Dockerfile内容:

# v2024.3.10
# =================================
FROM --platform=linux/amd64 mambaorg/micromamba:latest

ARG ENV_NAME

SHELL ["/usr/local/bin/_dockerfile_shell.sh"]

WORKDIR /tmp/

# Data
USER root
RUN mkdir -p /volumes/
RUN mkdir -p /volumes/input
RUN mkdir -p /volumes/output
RUN mkdir -p /volumes/database

# Retrieve VEBA repository
RUN mkdir -p veba/
USER $MAMBA_USER
COPY --chown=$MAMBA_USER:$MAMBA_USER ./install/ veba/install/
COPY --chown=$MAMBA_USER:$MAMBA_USER ./bin/ veba/bin/
COPY --chown=$MAMBA_USER:$MAMBA_USER ./VERSION veba/VERSION
COPY --chown=$MAMBA_USER:$MAMBA_USER ./LICENSE veba/LICENSE

# Fix: 
# critical libmamba Download error (28) Timeout was reached
# [https://conda.anaconda.org/bioconda/linux-64/blast-2.13.0-hf3cf87c_0.tar.bz2]
# Operation too slow. Less than 30 bytes/sec transferred the last 60 seconds

ARG MAMBA_NO_LOW_SPEED_LIMIT=1

# Build .condarc
RUN echo "channel_priority: flexible" >> ~/.condarc
RUN echo "channels:" >> ~/.condarc
RUN echo "  - conda-forge" >> ~/.condarc
RUN echo "  - bioconda" >> ~/.condarc
RUN echo "  - jolespin" >> ~/.condarc

# Install dependencies
RUN micromamba install -y -n base -f veba/install/environments/${ENV_NAME}.yml && \
    micromamba clean -a -y -f

# Add environment scripts to environment bin
RUN cp -rf veba/bin/* /opt/conda/bin/ && \
    ln -sf /opt/conda/bin/scripts/*.py /opt/conda/bin/ && \
    ln -sf /opt/conda/bin/scripts/*.r /opt/conda/bin/

ENTRYPOINT ["/usr/local/bin/_entrypoint.sh"]

奇怪的是昨晚还能成功构建对应VEBA-annotate_env.yml的镜像,现在不行了。需要构建的镜像依赖的yaml文件都在VEBA项目的install/environments目录下。

求问:如何在Apple Silicon上成功构建这些Docker镜像?


解决方案

1. 开启Docker跨平台构建支持

Apple Silicon上构建amd64镜像需要Docker的BuildKit和Rosetta模拟支持:

  • 打开Docker Desktop设置,勾选"Use the new Virtualization framework"和"Enable Rosetta for x86/amd64 emulation on Apple Silicon"
  • 启用buildx工具:
    docker buildx create --use
    

2. 调整构建命令

用buildx显式指定平台构建,替换原来的命令:

docker buildx build --platform=linux/amd64 --build-arg ENV_NAME=${ENV_NAME} -t ${TAG} -f Dockerfile ../../ --load

--load参数会把构建好的amd64镜像加载到本地Docker仓库,方便直接运行。

3. 解决conda下载超时问题

大概率是源的网络问题,试试这些调整:

  • 在Dockerfile的.condarc配置中添加超时参数:
    RUN echo "remote_read_timeout_secs: 120" >> ~/.condarc
    RUN echo "remote_connect_timeout_secs: 30" >> ~/.condarc
    
  • 切换到国内镜像源(比如清华),替换原来的channels配置:
    RUN echo "channel_priority: flexible" >> ~/.condarc
    RUN echo "channels:" >> ~/.condarc
    RUN echo "  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/" >> ~/.condarc
    RUN echo "  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/" >> ~/.condarc
    RUN echo "  - jolespin" >> ~/.condarc
    RUN echo "default_channels:" >> ~/.condarc
    RUN echo "  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/" >> ~/.condarc
    RUN echo "  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r/" >> ~/.condarc
    RUN echo "  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2/" >> ~/.condarc
    
  • 清理Docker缓存,避免之前失败的缓存干扰:
    docker builder prune -af
    

4. 检查Dockerfile权限与路径

  • 确认$MAMBA_USER在基础镜像中存在,避免复制文件时的权限错误
  • 验证构建命令中的../../是否正确指向VEBA项目根目录,确保COPY的文件能被找到

5. 尝试原生arm64构建(可选)

如果VEBA的依赖有arm64版本,可以去掉Dockerfile中--platform=linux/amd64,构建原生arm64镜像:

FROM mambaorg/micromamba:latest

但如果部分依赖只有amd64版本,还是得回到amd64模拟构建。


内容的提问来源于stack exchange,提问作者O.rka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 02:26:03