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

M1 Pro MacBook上Docker构建Rosetta错误的解决方案咨询

问题场景与错误日志

在M1 Pro MacBook(ARM64架构)上构建Docker容器项目时,出现以下Rosetta相关错误:

59.35 
59.35 2023-08-17 03:27:46 (15.7 MB/s) - ‘/usr/local/bin/swagger’ saved [22016032/22016032]
59.35 
59.36 rosetta error: failed to open elf at /lib64/ld-linux-x86-64.so.2
59.36  ./build/build_swagger.sh: line 6:   100 Trace/breakpoint trap   swagger flatten "${scriptdir}"/../server/source/swagger-specs/index.yaml -o "${scriptdir}"/../server/source/swagger-specs/api.yaml --format=yaml --with-flatten=full
------
Dockerfile:42
--------------------
  40 |     COPY --from=crypt-dep /src/crypt/b64utils.h /dist/b64utils.h
  41 |     COPY --from=crypt-dep /src/crypt/cryptlib.h /dist/cryptlib.h
  42 | >>> RUN ./build/build_go_deps.sh
  43 |     
  44 |     RUN chmod 755 /go/src/lakehouse/bin/restapi-server
--------------------
ERROR: failed to solve: process "/bin/sh -c ./build/build_go_deps.sh" did not complete successfully: exit code: 133
make: *** [docker] Error 1

补充:build_go_deps.sh脚本内容如下:

#!/bin/bash
set -e

scriptdir=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)

echo "Installing swagger..."
curl -L https://github.com/go-swagger/go-swagger/releases/download/v0.29.0/swagger_linux_amd64 -o /usr/local/bin/swagger
chmod +x /usr/local/bin/swagger

"${scriptdir}"/build_swagger.sh

echo "Installing go dependencies..."
go mod download
问题解答

该错误是否与ARM平台的Docker支持相关?

是,直接相关。M1 Pro属于ARM64架构,脚本中下载的swagger_linux_amd64是x86_64架构的二进制程序。Docker在Apple Silicon上运行x86程序依赖Rosetta 2转译,但当前容器内缺少x86程序必需的动态链接器/lib64/ld-linux-x86-64.so.2,导致Rosetta无法完成转译,触发错误。

解决方案

1. 使用ARM64原生版本的swagger

修改build_go_deps.sh中的curl命令,替换为对应ARM64架构的swagger下载链接:

curl -L https://github.com/go-swagger/go-swagger/releases/download/v0.29.0/swagger_linux_arm64 -o /usr/local/bin/swagger

原生ARM二进制无需Rosetta转译,从根源解决架构不兼容问题,同时性能更优。

2. 启用Docker的Rosetta模拟并指定x86平台

  • 打开Docker Desktop设置,在「Features in development」中勾选「Use Rosetta for x86/amd64 emulation on Apple Silicon」;
  • 构建镜像时指定x86平台参数,确保容器使用x86兼容环境:
    docker build --platform linux/amd64 .
    
    此方式下Docker会通过Rosetta模拟x86环境,且对应的x86基础镜像会自带所需的动态链接器。

3. 手动安装x86动态链接器(临时方案)

若必须使用x86版本的swagger,可在Dockerfile中执行RUN命令安装x86架构的C库(以Debian/Ubuntu系镜像为例):

RUN apt-get update && apt-get install -y libc6-amd64

该操作会在容器内添加/lib64/ld-linux-x86-64.so.2,让Rosetta能够正常转译x86程序。

内容的提问来源于stack exchange,提问作者Aromal Santhosh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 03:26:11