standard_init_linux.go:219:exec 用户进程导致:exec 格式错误 ECR + Quarkus

问题描述

好的,我已经知道 SO 上有很多错误,但是我找不到任何适合我的情况。

前提:

我的环境是带有 M1 的 MacOS。

我有一个 EKS 集群,使用 linux (amd64) 作为 AWS 上的操作系统架构。

在尝试使用 Quarkus 构建和部署我的微服务时,我设置了 application.properties:

quarkus.container-image.image=<my ECR repository>
quarkus.container-image.build=true
quarkus.container-image.push=true
quarkus.jib.platforms=linux/amd64

我正在使用 jib 扩展来构建图像。

在我的 ECR aws 注册表中成功部署映像后,我将启动:

 kubectl apply -f target/kubernetes/kubernetes.yaml

然后

 kubectl get po

我明白了

NAME                              READY   STATUS             RESTARTS   AGE
kube-cm-example-6ffd58655-rzzqh   0/1     CrashLoopBackOff   8          16m

然后

kubectl logs kube-cm-example-6ffd58655-rzzqh

返回以下输出

standard_init_linux.go:219: exec user process caused: exec format error

我在许多来源上读到这是一个平台映像问题,但是使用 jib 我设置了 linux/amd64,它与节点的架构相同。

我还尝试手动构建一个指定 platform=linux/amd64 的 docker 镜像,然后部署到 ECR,但没有任何变化。

解决方法

根据观察,您的 Kubernetes 集群可能在启动 Pod 时没有从 ECR 拉取新更新的镜像。除非满足某些条件,否则 k8s 的默认拉取策略会跳过拉取镜像(如果它们已经存在)。在开发过程中,您可以考虑让它始终拉取图像。看看这个Stack Overflow question