Mac M1 Silicon docker编译(解决no matching manifest for linux/arm64/v8)

Silicon版本的idea和docker参考

问题来源

在idea里执行

mvn clean package -DskipTests=true docker:build

报错

[ERROR] Failed to execute goal com.spotify:docker-maven-plugin:0.4.13:build (default-cli) on project ltfxpos: Exception caught: no matching manifest for linux/arm64/v8 in the manifest list entries -> [Help 1]

从字面意思看,就是mac m1 安装的是arm64架构的docker,编译的时候没有指定平台。

主要参考

docker支持跨平台编译,用命令 buildx,这个是CLI 插件

How to build x86 (and others!) Docker images on an M1 Mac
多平台容器镜像构建就看这一篇
How to Actually Deploy Docker Images Built on M1 Macs With Apple Silicon
How to build x86 (and others!) Docker images on an M1 Mac

流程

打开experimental

Mac M1 Silicon docker编译(解决no matching manifest for linux/arm64/v8)

创建builder

# 新建同时切换 builder 
docker buildx create --use --name mybuilder
# 只新建,然后再切换 builder
docker buildx create --name mybuilder
docker buildx use mybuilder

编译

docker buildx build -f src/main/docker/Dockerfile  --platform linux/amd64 --load  -t uhub.service.ucloud.cn/ltfxpos/ltfxpos:lastest .

之前是用maven插件docker编译的,命令是

mvn clean package -DskipTests=true docker:build

在pom里指定了dockerfile路径,编译出来的jar文件路径,所以直接执行 docker:build就行,如果是在命令行里就需要指定对应的文件文件
参数说明:

-f dockerile路径
-platform 平台,可以用命令docker buildx  ls 查看支持的平台
-t 编译的images名字
--load 加载到本机docker里
上一篇:java-Android-如何在按下HOME时取消所有活动?


下一篇:android – 在新的应用程序版本中更改启动器活动名称