M1 MacBook构建Alpine 3.13镜像出现syslinux报错及APK源签名错误
M1芯片Mac构建Alpine 3.13镜像报错解决方案
问题根因
- M1芯片为arm64架构,默认拉取运行的Alpine 3.13容器为arm64版本,你的构建脚本强制指定了
--arch x86_64参数,跨架构构建场景下,旧版Alpine的apk包管理器无法正确校验x86_64软件源的签名,因此会抛出UNTRUSTED signature报错。 - syslinux工具仅支持x86/amd64架构,arm64环境下没有对应的安装包,所以你在安装依赖阶段就会先出现syslinux相关报错。
- 你使用的其他Intel架构Mac本身为x86_64环境,不存在跨架构兼容问题,因此可以正常构建。
解决方案
方案1(无需修改Dockerfile,推荐)
强制Docker以x86_64架构构建、运行镜像,构建命令添加--platform linux/amd64参数即可:
docker build --platform linux/amd64 -t 自定义镜像名 .
M1芯片的Docker Desktop内置Rosetta 2转译支持,转译运行x86_64镜像不会出现兼容性问题,可完全复现Intel Mac上的构建效果。
方案2(适配arm64原生构建)
如果需要在M1上原生arm64环境构建,修改Dockerfile两处配置即可:
- 依赖安装部分移除
syslinux,你已经安装了arm64架构可用的引导工具grub-efi,仅注释掉syslinux即可 - 修改ENTRYPOINT中的
--arch x86_64参数为--arch aarch64,如果需要产出x86_64架构的镜像则不推荐用该方案。
内容的提问来源于stack exchange,提问作者Dylan
相关产品推荐
相关产品推荐

