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

Mac M1(arm64)环境Docker构建wget报错(exit code:139)求助

M1芯片Docker构建时wget执行报错(exit code 139)的解决方法

问题场景

使用Mac M1(arm64)芯片构建基于openjdk:8-jdk-alpine的Docker镜像时,执行wget下载命令出现exit code: 139错误。拆分RUN命令后定位到报错行:

RUN wget -q -O /tmp/downloads/file.zip https://repo1.maven.org/maven2/file.zip

进入容器调试发现wget无法识别完整参数,加双引号也无效。

解决方法

1. 替换wget为curl

alpine镜像中的wget在arm64架构下存在兼容性问题,改用curl替代:

RUN curl -sSL -o /tmp/downloads/file.zip https://repo1.maven.org/maven2/file.zip

参数说明:

  • -s:静默模式,不显示进度
  • -S:显示错误信息
  • -L:跟随重定向
  • -o:指定输出文件路径(对应wget的-O)

2. 指定构建平台为linux/amd64

利用Docker的QEMU模拟amd64架构执行构建,命令改为:

docker build --platform linux/amd64 -t tag:name .

注意:这种方式会有一定性能损耗,但能直接解决架构不兼容问题。

3. 使用arm64适配的基础镜像

替换基础镜像为官方支持arm64的openjdk8镜像:

FROM arm64v8/openjdk:8-jdk-alpine

该镜像专门适配arm64架构,内置工具(包括wget)可正常运行。

关于禁用/bin/sh -c的说明

Docker的RUN命令默认通过/bin/sh -c执行,若要改用bash直接执行,可将命令写成exec格式:

RUN ["bash", "-c", "wget -q -O /tmp/downloads/file.zip https://repo1.maven.org/maven2/file.zip"]

但此方法仅改变执行shell的方式,不一定能解决当前的架构兼容性问题,建议优先尝试前面的三种方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 22:08:13