【问题标题】:Error when running Nodejs docker in AWS ECS Fargate在 AWS ECS Fargate 中运行 Nodejs docker 时出错
【发布时间】:2021-03-13 18:43:48
【问题描述】:

我们正在尝试使用 ECS 在 AWS Fargate 中部署 NodeJS Docker。代码配置为通过 GitHub -> CodeBuild -> ECR -> ECS Fargate。

当我们运行 ECS 服务时,我们面对的是standard_init_linux.go:219: exec user process caused: exec format error。当我们在本地运行图像时,它运行没有问题。当我们搜索这个错误时,提到它是由于架构不匹配造成的。

Docker 文件:

FROM node:14 as builder

COPY . /contents
WORKDIR /contents

RUN npm install

RUN npm run build

...


EXPOSE 3000

我们尝试的 CodeBuild 架构是

  1. AL2 aarch64 1.0/2.0
  2. AL2 x86-64 2.0/3.0
  3. Ubuntu 3.0/4.0/5.0

Node 14 适合 CodeBuild 的环境是什么?还有其他可能导致问题的原因吗?

感谢任何帮助。谢谢!

【问题讨论】:

    标签: node.js docker debian aws-codebuild amazon-ecr


    【解决方案1】:

    正如您所指出的,此问题通常是由架构不匹配引起的。 Fargate 不支持(尚) Graviton/Arm 架构,它始终需要基于 x86-64 的映像。因为 Codebuild 支持多种架构,所以很可能会出现不匹配。请勿将 AL2 aarch64 1.0/2.0 与 CodeBuild 一起使用,因为该选项将配置 Graviton/Arm 环境以进行构建,因此生成的映像无法在 Fargate 上运行。另外两个应该生成与 Fargate 兼容的图像。

    试金石(以确保这是由于架构不匹配造成的)将是动态配置一个小的 Graviton based instance 并测试在 Fargate 上失败并显示该错误消息的 SAME 容器映像。如果它适用于 Graviton,那就是问题所在。

    【讨论】:

    • 我们如何将图像设置为 x86-64 图像,因为这似乎是适用于远门的选项。鉴于内容来自github,我们如何设置Code Build来创建x86-64镜像。
    • 应用程序代码源和 CodeBuild 环境解耦。 GH 存储库可能(可选)包含一个buildspec.yaml 文件,该文件基本上告诉 CB 如何构建工件,但要使用的 CB 环境是带外指定的(通过 API、IaC、UI,如您所愿) 作为build project。构建项目基本上指定了源代码库、环境(例如 x86 与 Arm)、buildspec.yaml(来自 repo 或项目中)和其他内容。
    最近更新 更多