使用ECR镜像部署Nginx到EKS时容器重启失败求助
问题诊断与解决思路
核心原因:CPU架构不匹配
exec /docker-entrypoint.sh: exec format error 这个错误几乎都是容器镜像的CPU架构与Kubernetes节点的CPU架构不兼容导致的:
- 你的本地机器大概率是ARM架构(比如M1/M2/M3系列Mac),构建的ECR镜像仅支持ARM64格式
- EKS默认节点为x86_64(AMD/Intel)架构,无法直接运行ARM64镜像
验证步骤
检查本地机器架构:
uname -m若输出为
arm64,说明本地是ARM架构。检查EKS节点架构:
kubectl describe nodes | grep "Architecture"输出通常为
amd64(即x86_64)。检查ECR镜像的架构支持:
docker inspect *.dkr.ecr.*.amazonaws.com/nginx:dev | grep -A5 "Architecture"若仅显示
arm64,说明镜像仅支持ARM架构。
解决办法
方法1:构建多架构镜像
重新构建同时支持x86_64和arm64的多架构镜像并推送到ECR:
- 启用Docker buildx(未启用时执行):
docker buildx create --use - 构建并推送多架构镜像:
(假设Dockerfile在当前工作目录)docker buildx build --platform linux/amd64,linux/arm64 -t *.dkr.ecr.*.amazonaws.com/nginx:dev --push .
方法2:使用EKS ARM节点组
在EKS中创建基于AWS Graviton2/3实例的ARM架构节点组,让Pod调度到这些节点上运行ARM64镜像。
方法3:本地模拟x86架构构建镜像
若不需要多架构支持,可在本地用x86兼容模式构建镜像:
docker build --platform linux/amd64 -t *.dkr.ecr.*.amazonaws.com/nginx:dev . docker push *.dkr.ecr.*.amazonaws.com/nginx:dev
(Docker Desktop需开启"Use Rosetta for x86/amd64 emulation on Apple Silicon"选项)
后续验证
推送新镜像后,删除旧Pod让Deployment重新拉取镜像:
kubectl delete pods -l app=nginx
随后查看Pod状态与日志,确认问题解决。
内容的提问来源于stack exchange,提问作者Tristan
相关产品推荐
相关产品推荐

