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

Ste*_*nan 2 amazon-web-services amazon-ecs node.js docker aws-fargate

我对 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"]
Run Code Online (Sandbox Code Playgroud)

后端:

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"]
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激!

Ben*_*com 149

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

  • 谢谢你,这绝对救了我。正如此处和另一个[线程](/sf/ask/4881744101/)中所讨论的那样,这错误是由于在 Apple Silicon (ARM) 架构上进行构建而导致的,目的是部署在基于 x86 的 AWS ECS(对我来说)上。使用不同架构构建的二进制文件不兼容。 (5认同)

Joe*_*eri 12

在 Mac M1 上使用:

FROM --platform=linux/amd64  alpine:3.10
Run Code Online (Sandbox Code Playgroud)

我每天都陷入烦人的陷阱。我感受到你的痛苦。您的 Docker 桌面应该显示 AMD64 徽章。我觉得这应该是相反的,它应该在本地编译时显示“没有任何东西并且没有人兼容M1”徽章。或两者。

docker 桌面截图


lar*_*sks 11

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

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

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

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


A. *_*all 6

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

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

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