Quarkus原生多架构Docker镜像跨架构运行缺失链接库问题
多架构Quarkus原生Docker镜像跨架构运行失败问题
我正从搭载i9芯片的MacBook切换至M2芯片的MacBook,想要构建同时支持linux/amd64和linux/arm64的多架构Docker镜像。镜像在对应架构的电脑上可正常构建运行,但跨架构运行时出现以下错误:
跨架构运行错误信息
- 在arm64电脑运行amd64构建时报错:
rosetta error: failed to open elf at /lib64/ld-linux-x86-64.so.2
- 在amd64电脑运行arm64构建时报错:
qemu-aarch64: Could not open '/lib/ld-linux-aarch64.so.1': No such file or directory
镜像清单信息
镜像清单已生成两个架构的构建,内容如下:
{ "mediaType": "application/vnd.oci.image.index.v1+json", "schemaVersion": 2, "manifests": [ { "mediaType": "application/vnd.oci.image.manifest.v1+json", "digest": "sha256:116ac56b8bf2e7535ded9b51864097fa14c1ede90d70b41b7a16807bbb824cda", "size": 1051, "platform": { "architecture": "amd64", "os": "linux" } }, { "mediaType": "application/vnd.oci.image.manifest.v1+json", "digest": "sha256:083db49717725e61b15927b4fe0f5a779802bc7e1b01e216c6f4e77d981b77de", "size": 1051, "platform": { "architecture": "arm64", "os": "linux" } }, { "mediaType": "application/vnd.oci.image.manifest.v1+json", "digest": "sha256:0a1538b844bf6800f74a6f85da0ae1e755176cb2545a2fed64ef3d7de2e9fb63", "size": 566, "annotations": { "vnd.docker.reference.digest": "sha256:116ac56b8bf2e7535ded9b51864097fa14c1ede90d70b41b7a16807bbb824cda", "vnd.docker.reference.type": "attestation-manifest" }, "platform": { "architecture": "unknown", "os": "unknown" } }, { "mediaType": "application/vnd.oci.image.manifest.v1+json", "digest": "sha256:67867ec55873cb43d562f86a1933d3933d6d5b9dc60d97899b9dc9adc22d664a", "size": 566, "annotations": { "vnd.docker.reference.digest": "sha256:083db49717725e61b15927b4fe0f5a779802bc7e1b01e216c6f4e77d981b77de", "vnd.docker.reference.type": "attestation-manifest" }, "platform": { "architecture": "unknown", "os": "unknown" } } ] }
问题复现步骤
- 创建新Quarkus应用:
quarkus create app --extensions=io.quarkus:quarkus-resteasy,io.quarkus:quarkus-container-image-docker multi-arch
- 在
application.properties文件中添加以下配置:
# Default Image quarkus.docker.buildx.platform=linux/amd64,linux/arm64 quarkus.container-image.group=<YOUR_GROUP> quarkus.container-image.registry=<YOUR_REGISTRY> quarkus.container-image.name=multi-arch quarkus.container-image.tag=docker quarkus.container-image.push=true
- 执行构建命令:
/mvnw clean package -Pnative -Dquarkus.native.container-build=true -Dquarkus.container-image.build=true
- 运行容器镜像:
docker run -p 8080:8080 <YOUR_REGISTRY>/<YOUR_GROUP>/multi-arch:docker
- 验证运行状态:访问
http://localhost:8080/hello
补充说明
- 仅原生镜像存在该问题,JVM镜像可正常跨架构运行。
- 已确认
Dockerfile.native使用的基础镜像registry.access.redhat.com/ubi8/ubi-minimal:8.6为多架构镜像。
内容的提问来源于stack exchange,提问作者Matthew Demerath
相关产品推荐
相关产品推荐

