'exec user process caused: exec format error' 在 AWS Fargate 服务中
'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 命令之一,但我无法在任何地方找到如何找到 [=28] 体系结构的好答案=] 或如何追踪导致问题的特定命令。
这些是我的前端和后端 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 可能 运行ning 在更常见的 Intel x86-64 架构上。您在 Mac 上本地构建的图像将无法 运行 在那里。
最简单的解决方案可能是让您的图像在 Docker Hub 中自动构建(或使用 Github Action to build them in Github)。
我没有关于您如何构建和部署映像的所有详细信息,因此我可能遗漏了一些详细信息。
对于回到这里的任何人,Docker 现在已经发布了一个名为 buildx 的实验性多架构构建命令,您可以指定架构并将这些容器一起发布。这解决了我的问题,非常感谢上面那些为我指明正确方向的人!
简答:
docker buildx build --platform=linux/amd64 -t <image-name> .
Images build on a particular architecture do not work on other architecture.
我尝试在 Mac M1 芯片上构建镜像并将其推送到 dockerhub。我正在尝试 运行 EKC 集群上的容器与 Amazon Linux 工作节点,但最终失败了。以下是我找到的解决方案,对我来说效果很好。
烧瓶应用程序
#!/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 的新手,但我已经 运行 我的应用程序在本地 dockerized 几个月了,现在没有任何问题。现在我正尝试通过 AWS ECS/Fargate 部署此应用程序,我的容器因此 linux 错误而反复停止:standard_init_linux.go:219: exec user process caused: exec format error
。此错误似乎表明 Fargate 中的体系结构无法识别我是 运行 的 Linux 命令之一,但我无法在任何地方找到如何找到 [=28] 体系结构的好答案=] 或如何追踪导致问题的特定命令。
这些是我的前端和后端 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 可能 运行ning 在更常见的 Intel x86-64 架构上。您在 Mac 上本地构建的图像将无法 运行 在那里。
最简单的解决方案可能是让您的图像在 Docker Hub 中自动构建(或使用 Github Action to build them in Github)。
我没有关于您如何构建和部署映像的所有详细信息,因此我可能遗漏了一些详细信息。
对于回到这里的任何人,Docker 现在已经发布了一个名为 buildx 的实验性多架构构建命令,您可以指定架构并将这些容器一起发布。这解决了我的问题,非常感谢上面那些为我指明正确方向的人!
简答:
docker buildx build --platform=linux/amd64 -t <image-name> .
我尝试在 Mac M1 芯片上构建镜像并将其推送到 dockerhub。我正在尝试 运行 EKC 集群上的容器与 Amazon Linux 工作节点,但最终失败了。以下是我找到的解决方案,对我来说效果很好。Images build on a particular architecture do not work on other architecture.
烧瓶应用程序
#!/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