Getting exec format error in ECS with Fargate

1

I am getting exec /bin/sh: exec format error while trying to deploy a basic Hello World container as ECS service using Fargate. Following are the steps I followed:

  1. Build the docker image using docker desktop for Mac
  2. Created the ECR repository using AWS console
  3. Pushed the docker image to ECR
  4. Created a task definition in ECS with Fargate as lunch type
  5. Tried to deploy ECS task as service

Here is the docker file I used to build the image:

FROM ubuntu:18.04

#Install dependencies

RUN apt-get update &&
apt-get -y install apache2

#Install apache and write hello world message

RUN echo 'Hello World!' > /var/www/html/index.html

#Configure apache

RUN echo '. /etc/apache2/envvars' > /root/run_apache.sh &&
echo 'mkdir -p /var/run/apache2' >> /root/run_apache.sh &&
echo 'mkdir -p /var/lock/apache2' >> /root/run_apache.sh && \ echo '/usr/sbin/apache2 -D FOREGROUND' >> /root/run_apache.sh && \ chmod 755 /root/run_apache.sh

EXPOSE 80

While troubleshooting the error I have tried to put #!/bin/sh as the first line in the docker file but that also did not work. I have tried to change the image from apache to NGINX and used different docker file like below:

FROM nginx

RUN rm /etc/nginx/conf.d/*

COPY hello.conf /etc/nginx/conf.d/

COPY index.html /usr/share/nginx/html/

Using this image I am getting exec /docker-entrypoint.sh: exec format error

已提问 1 年前10489 查看次数
1 回答
0

The "exec format error" error message usually indicates that the file you're trying to execute is not in the correct format. In this case, it could mean that the entrypoint script you're trying to run in the Docker image (/docker-entrypoint.sh) is not in the correct format for the underlying system architecture. To resolve this issue, make sure the Docker image you're using is compatible with the system architecture of the Fargate cluster. If you're using a 64-bit Ubuntu 18.04 image, for example, the architecture should be x86_64. If the image is not compatible with the architecture, you'll need to create a new image that is compatible. In your second Dockerfile, it seems that you're missing the CMD command, which is required to run the container. You'll need to add the following line to the end of the Dockerfile to run Nginx:

CMD ["nginx", "-g", "daemon off;"]

This will run Nginx in the foreground, which is necessary for Fargate to manage the lifecycle of the container.

profile picture
已回答 1 年前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则