Mac M2运行docker-compose报错:openjdk:17-alpine镜像平台不兼容
问题:Docker-Compose运行失败,平台兼容性报错
执行命令 docker-compose up 后返回如下错误:
[+] Building 1.7s (4/4) FINISHED docker:default => [web internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [web internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 701B 0.0s => ERROR [web internal] load metadata for docker.io/library/openjdk:17-a 1.7s => [web auth] library/openjdk:pull token for registry-1.docker.io 0.0s ------ > [web internal] load metadata for docker.io/library/openjdk:17-alpine: ------ failed to solve: openjdk:17-alpine: no match for platform in manifest sha256:4b6abae565492dbe9e7a894137c966a7485154238902f2f25e9dbd9784383d81: not found
已知问题源于平台兼容性(Mac系统,镜像为Windows环境构建),已尝试添加 platform: linux/x86_64 参数、执行 rm ~/.docker/config.json 等方案,报错仍未解决。
当前配置文件内容
Dockerfile
#pulling base image and updating apk FROM openjdk:17-alpine RUN apk update && \ apk add --no-cache tzdata #making directory for jar and transfer it RUN mkdir /opt/app COPY target/dormitory_marketplace-0.0.1-SNAPSHOT.jar /opt/app/dm.jar WORKDIR /opt/app #running jar CMD java -jar dm.jar
docker-compose.yml
version: "3" services: web: build: . container_name: web ports: - "8080:8080" depends_on: - redis environment: REDIS_HOST: redis redis: container_name: redis image: "redis:latest"
解决方案
更换基础镜像为多平台兼容版本
OpenJDK 17-alpine部分镜像对Apple Silicon(arm64)支持不足,替换为Adoptium维护的Temurin镜像,修改Dockerfile第一行:FROM eclipse-temurin:17-alpine该镜像原生支持arm64和x86_64平台,适配性更强。
在docker-compose.yml中明确构建平台
在web服务的build配置下添加platform参数,强制指定构建平台:services: web: build: context: . platform: linux/x86_64 # 若为M系列Mac,也可尝试linux/arm64/v8 # 其余配置保持不变清理缓存后重新构建
执行命令清理旧缓存,避免残留镜像干扰:docker system prune -a docker-compose build --no-cache docker-compose up检查Docker Desktop设置
打开Docker Desktop,进入设置 > 功能开发,启用使用新虚拟化框架;若为M系列Mac,在设置 > 资源 > 高级中开启Rosetta for x86/amd64 emulation on Apple Silicon,确保x86镜像能正常运行。
内容的提问来源于stack exchange,提问作者Nurdos
相关产品推荐
相关产品推荐

