繁体   English   中英

AWS Fargate 服务中的“exec 用户进程导致:exec 格式错误”

[英]'exec user process caused: exec format error' in AWS Fargate Service

我是 AWS 的新手,但我已经在本地运行我的 dockerized 应用程序几个月了,没有任何问题。 现在,我正尝试通过 AWS ECS/Fargate 部署此应用程序,我的容器因以下 linux 错误而反复停止: standard_init_linux.go:219: exec user process caused: exec format error 此错误似乎表明 Fargate 中的体系结构无法识别我正在运行的 Linux 命令之一,但我无法在任何地方找到关于如何找到正在运行的体系结构或如何追踪导致的特定命令的好答案问题。

这些是我的前端和后端 Dockerfile。 该项目建立在 MERN 堆栈中,分为前端 (React) 和后端 (MongoDB/Express)

前端:

FROM alpine:3.10

ENV NODE_VERSION 15.9.0

WORKDIR /frontend

COPY package*.json ./

RUN apk add --no-cache nodejs npm

# some packages rely on gyp so we need this
# pulled from https://github.com/nodejs/docker-node/issues/282
RUN apk add --no-cache --virtual .gyp \
        python \
        make \
        g++ \
    && npm install

COPY . .

EXPOSE 3000

CMD ["npm", "start"]

后端:

FROM alpine:3.10

ENV NODE_VERSION 15.9.0

WORKDIR /backend

COPY package*.json ./

RUN apk add --no-cache nodejs npm

# some packages rely on gyp so we need this
# pulled from https://github.com/nodejs/docker-node/issues/282
RUN apk add --no-cache --virtual .gyp \
        python \
        make \
        g++ \
    && npm install --silent\
    && apk del .gyp

COPY ./ ./

EXPOSE 8080

CMD ["npm", "start"]

任何帮助将不胜感激!

我想你已经确定了你的问题。

您正在 Apple 的 M1 芯片上构建图像,该芯片是 ARM 架构。 Fargate 可能运行在更常见的 Intel x86-64 架构上。 您在 Mac 上本地构建的图像将无法在那里运行。

最简单的解决方案可能是让您的图像在 Docker 集线器中自动构建(或使用Github 操作在 Github 中构建它们)。

我没有关于如何构建和部署图像的所有详细信息,因此我可能遗漏了一些细节。

简短回答: docker buildx build --platform=linux/amd64 -t <image-name>.

对于任何回到这里的人,Docker 现在附带一个名为 buildx 的实验性多架构构建命令,您可以指定架构并将这些容器一起交付。 这解决了我的问题,非常感谢上面的人指出我正确的方向!

建立在特定架构上的图像不适用于其他架构。

我尝试在 Mac M1 芯片上构建映像并将其推送到 dockerhub。 我正在尝试使用最终失败的 Amazon Linux 工作节点在 EKC 集群上运行容器。 以下是我找到并为我完美工作的解决方案。

Flask 应用

#./usr/bin/env python3 from flask import Flask app = Flask("basicApp") @app:route("/") def sayHello(): return "<h4 style='color:teal'>Hello World.</h4>" if __name__ == "__main__": app.run()

Docker文件

FROM python:3.7-alpine COPY flaskApp/app.py /app.py RUN chmod 755 /app.py RUN pip3 install flask ENTRYPOINT ["python3", "-m", "flask", "run", "--host=0.0.0.0", "-p", "3000"]

Kubernetes文件

--- apiVersion: v1 kind: Pod metadata: name: flask-app labels: name: flask-app spec: containers: - name: flask-app image: vikrampruthvi5/flask-app:1.1 ports: - containerPort: 3000

使用的命令docker buildx build --platform=linux/amd64 -t vikrampruthvi5/flask-app:1.1. docker push vikrampruthvi5/flask-app:1.1

正如其他答案所提到的,当您使用 ARM 处理器构建 docker 映像并尝试在 Fargate 中的 x86 处理器上运行时,可能会发生这种情况。

截至 2021 年 11 月 23 日,Fargate 现在支持 ARM 架构,但找到它可能有点棘手。 确保启用“新 ECS 体验”,然后在创建新任务定义时会看到使用 ARM 的选项。

资料来源: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-arm64.html

出于某种原因,AWS Sage Maker 不喜欢我们从 mac m1 构建而是使用目标平台 linux/amd64。 如果我使用英特尔 mac 代替,相同的代码可以工作。

在 Mac M1 上使用:

FROM --platform=linux/amd64  alpine:3.10

我每天都在烦人的陷阱。 我感觉到你的痛苦。 您的 docker 桌面应显示 AMD64 徽章。 我觉得这应该是相反的,它应该在本地编译时显示“with nothing and no-one compatible M1”标志。 或两者。

泊坞窗桌面截图

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM