You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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镜像

验证步骤

  1. 检查本地机器架构:

    uname -m
    

    若输出为arm64,说明本地是ARM架构。

  2. 检查EKS节点架构:

    kubectl describe nodes | grep "Architecture"
    

    输出通常为amd64(即x86_64)。

  3. 检查ECR镜像的架构支持:

    docker inspect *.dkr.ecr.*.amazonaws.com/nginx:dev | grep -A5 "Architecture"
    

    若仅显示arm64,说明镜像仅支持ARM架构。

解决办法

方法1:构建多架构镜像

重新构建同时支持x86_64和arm64的多架构镜像并推送到ECR:

  1. 启用Docker buildx(未启用时执行):
    docker buildx create --use
    
  2. 构建并推送多架构镜像:
    docker buildx build --platform linux/amd64,linux/arm64 -t *.dkr.ecr.*.amazonaws.com/nginx:dev --push .
    
    (假设Dockerfile在当前工作目录)

方法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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 07:41:29