我是k8s的新手,我已经使用eks和ecr部署了一个简单的nginx部署,这个问题只在我使用ecr image时出现,在使用docker hub的nginx public image时不会出现,这是我的部署文件。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
imagePullSecrets:
- name: *-ecr-registry
containers:
- name: nginx
# image: nginx:latest
image: *.dkr.ecr.*.amazonaws.com/nginx:dev
这是一个pod的输出。
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 12s default-scheduler Successfully assigned *
Normal Pulled 10s (x2 over 12s) kubelet Container image * already present on machine
Normal Created 10s (x2 over 12s) kubelet Created container nginx
Normal Started 10s (x2 over 11s) kubelet Started container nginx
Warning BackOff 8s (x2 over 9s) kubelet Back-off restarting failed container
以下是pod的结果日志
exec /docker-entrypoint.sh: exec format error
我也运行了ecr图像与docker在我的本地机器没有任何错误。有人能给予我一些提示,我如何克服这个问题,提前感谢。
2条答案
按热度按时间uxh89sit1#
请求的映像平台(linux/amd64)与检测到的主机平台(linux/arm64/v8)不匹配,并且未请求特定平台
这是因为您在Mac上的ARM M1芯片上构建了Docker映像,并尝试在AMD上运行它,或者相反,因为它会引发错误。
您可以通过传递ARG**--platform**再次构建Docker映像
也可以设置环境变量
export DOCKER_DEFAULT_PLATFORM=linux/amd64
您可以在Dockerfile中或在运行命令
docker build --platform
时使用FROM传递ARG参考文档:www.example.comhttps://docs.docker.com/engine/reference/builder/#from
您也可以使用docker运行映像,例如
h43kikqp2#
经过几个小时的尝试,我意识到我使用的基本映像
keymetrics/pm2:18-alpine
只支持amd64内核。即使我尝试在arm64中重建我的映像,也无法在我的工作节点中使用arm64内核类型。因此,我认为有两种方法可以克服这个问题:node:18.14-alpine
等支持arm64和amd64内核的其他基础映像。