Mac M1环境下Docker构建出现manifest匹配失败问题求助
问题原因
Mac M1属于ARM64架构,你使用的adoptopenjdk/openjdk11:jre-11.0.11_9-alpine镜像仅提供AMD64(x86)架构版本,Docker无法找到匹配ARM64的镜像manifest,因此报错。
解决方案
方案1:指定平台构建(兼容原有镜像)
在Dockerfile的FROM指令中添加平台指定,强制使用AMD64架构镜像,Docker会通过QEMU模拟运行:
FROM --platform=linux/amd64 adoptopenjdk/openjdk11:jre-11.0.11_9-alpine VOLUME /tmp COPY build/libs/*.jar myapp.jar ENTRYPOINT ["java", "-Xmx800m", "-XX:+UseG1GC", "-jar", "-Dspring.profiles.active=cloud", "/myapp.jar"]
或者在构建命令中直接指定平台:
docker build --platform linux/amd64 -t myapp .
提示:开启Docker Desktop的「Use Rosetta for x86/amd64 emulation on Apple Silicon」选项(设置->Features in development),可以提升模拟运行的性能。
方案2:替换为支持ARM64的官方镜像
AdoptOpenJDK已迁移至Eclipse Temurin,后者提供多架构镜像,会自动适配M1的ARM64架构,无需模拟,性能更优。修改Dockerfile的基础镜像:
FROM eclipse-temurin:11-jre-alpine VOLUME /tmp COPY build/libs/*.jar myapp.jar ENTRYPOINT ["java", "-Xmx800m", "-XX:+UseG1GC", "-jar", "-Dspring.profiles.active=cloud", "/myapp.jar"]
额外修正:修复ENTRYPOINT路径错误
原Dockerfile中ENTRYPOINT指定的/myApp.jar为大写开头,但COPY命令生成的是小写的myapp.jar,会导致容器启动时找不到jar包,需统一为/myapp.jar。
内容的提问来源于stack exchange,提问作者Rajeesha R
相关产品推荐
相关产品推荐

