I am totally new to AWS but I've been running my dockerized application locally for months now with no issues. Now that I am trying to deploy this app via AWS ECS/Fargate, my containers are stopped repeatedly with this linux error: standard_init_linux.go:219: exec user process caused: exec format error
. This error seems to suggest that the architecture in Fargate does not recognize one of the Linux commands I'm running but I can't find a good answer anywhere for how to find the architecture that's running or how to track down the specific command that's causing the issue.
These are my Dockerfiles for the frontend and backend. The project is built in the MERN stack and is split into the frontend (React) and the backend (MongoDB/Express)
Frontend:
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"]
Backend:
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"]
Any help would be greatly appreciated!
I think you've identified your problem.
You're building your images on Apple's M1 chip, which is an ARM architecture. Fargate is probably running on the more common Intel x86-64 architecture. Images you build locally on your Mac aren't going to be able to run there.
The easiest solution is probably to have your images build automatically in Docker Hub (or use a Github Action to build them in Github).
I don't have all the details about how you're building and deploying your images, so it's possible I'm missing some details.