AWSFargate服务中的“exec用户进程导致:exec格式错误”
我对 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 Hub 中自动构建(或使用Github Action 在 Github 中构建它们)。
我没有关于您如何构建和部署图像的所有详细信息,因此我可能遗漏了一些细节。