Soy totalmente nuevo en AWS, pero he estado ejecutando mi aplicación dockerizada localmente durante meses sin problemas. Ahora que intento implementar esta aplicación a través de AWS ECS/Fargate, mis contenedores se detienen repetidamente con este error de Linux: standard_init_linux.go:219: exec user process caused: exec format error . Este error parece sugerir que la arquitectura en Fargate no reconoce uno de los comandos de Linux que estoy ejecutando, pero no puedo encontrar una buena respuesta en ninguna parte sobre cómo encontrar la arquitectura que se está ejecutando o cómo rastrear el comando específico que está causando la cuestión.
Estos son mis Dockerfiles para el frontend y el backend. El proyecto está integrado en la pila MERN y se divide en el frontend (React) y el backend (MongoDB/Express)
Interfaz:
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"]back-end:
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"]¡Cualquier ayuda sería muy apreciada!
Creo que has identificado tu problema.
Está construyendo sus imágenes en el chip M1 de Apple, que es una arquitectura ARM. Fargate probablemente se ejecuta en la arquitectura Intel x86-64 más común. Las imágenes que cree localmente en su Mac no podrán ejecutarse allí.
La solución más fácil es probablemente hacer que sus imágenes se construyan automáticamente en Docker Hub (o usar una acción de Github para construirlas en Github ).
No tengo todos los detalles sobre cómo está construyendo e implementando sus imágenes, por lo que es posible que me falten algunos detalles.
Para cualquiera que regrese aquí, Docker ahora se envía con un comando experimental de compilación de múltiples arquitecturas llamado buildx y puede especificar las arquitecturas y enviar estos contenedores juntos. Esto resolvió mi problema, ¡muchas gracias a los de arriba por señalarme en la dirección correcta!
Respuesta corta: docker buildx build --platform=linux/amd64 -t <image-name> .
Traté de crear una imagen en el chip Mac M1 y la presioné en dockerhub. Estoy tratando de ejecutar un contenedor en el clúster EKC con nodos de trabajo de Amazon Linux que finalmente fallaron. A continuación se muestra la solución que encontré y funcionó perfectamente para mí.Las imágenes basadas en una arquitectura en particular no funcionan en otra arquitectura.
Aplicación de Matraces
#!/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()archivo acoplable
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"]Archivo 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 Comandos usados docker buildx build --platform=linux/amd64 -t vikrampruthvi5/flask-app:1.1 . docker push vikrampruthvi5/flask-app:1.1
Como han mencionado otras respuestas, esto puede suceder cuando crea la imagen de la ventana acoplable con un procesador ARM e intenta ejecutarla en un procesador x86 en Fargate.
A partir del 23 de noviembre de 2021, Fargate ahora es compatible con la arquitectura ARM, pero puede ser un poco difícil de encontrar. Asegúrese de habilitar la "Nueva experiencia de ECS" y luego verá la opción para usar ARM al crear una nueva definición de tarea.
Fuente: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-arm64.html