docker 仅ECR映像回退重新启动失败的容器时出错

x3naxklr  于 2023-02-11  发布在  Docker
关注(0)|答案(2)|浏览(180)

我是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在我的本地机器没有任何错误。有人能给予我一些提示,我如何克服这个问题,提前感谢。

uxh89sit

uxh89sit1#

请求的映像平台(linux/amd64)与检测到的主机平台(linux/arm64/v8)不匹配,并且未请求特定平台
这是因为您在Mac上的ARM M1芯片上构建了Docker映像,并尝试在AMD上运行它,或者相反,因为它会引发错误。
您可以通过传递ARG**--platform**再次构建Docker映像

--platform linux/amd64

也可以设置环境变量export DOCKER_DEFAULT_PLATFORM=linux/amd64
您可以在Dockerfile中或在运行命令docker build --platform时使用FROM传递ARG

    • 停靠文件**
FROM --platform=linux/amd64 node
    • ARG**(带构建命令)
docker build -t <image-name> --platform linux/amd64

参考文档:www.example.comhttps://docs.docker.com/engine/reference/builder/#from
您也可以使用docker运行映像,例如

docker run --platform linux/amd64 node
h43kikqp

h43kikqp2#

经过几个小时的尝试,我意识到我使用的基本映像keymetrics/pm2:18-alpine只支持amd64内核。即使我尝试在arm64中重建我的映像,也无法在我的工作节点中使用arm64内核类型。因此,我认为有两种方法可以克服这个问题:

  • 使用amd64工作节点重新创建我的eks群集。
  • 或者切换到node:18.14-alpine等支持arm64和amd64内核的其他基础映像。

相关问题