Arehandoro
Arehandoro

Reputation: 387

Entrypoint not found when deployed to Fargate. Locally works

I have the following Dockerfile, currently working locally in my device:

FROM python:3.7-slim-buster

WORKDIR /app

COPY . /app

VOLUME /app

RUN chmod +x /app/cat/sitemap_download.py

COPY entrypoint.sh /app/entrypoint.sh

RUN chmod +x /app/entrypoint.sh

ARG VERSION=3.7.4

RUN apt update && \
       apt install -y bash wget && \
       wget -O /tmp/nordrepo.deb https://repo.nordvpn.com/deb/nordvpn/debian/pool/main/nordvpn-release_1.0.0_all.deb && \
       apt install -y /tmp/nordrepo.deb && \
       apt update && \
       apt install -y nordvpn=$VERSION && \
       apt remove -y wget nordvpn-release

RUN apt-get clean \
    && apt-get -y update
RUN apt-get -y install python3-dev \
    python3-psycopg2 \
    && apt-get -y install build-essential

RUN pip install --upgrade pip

RUN pip install -r cat/requirements.txt

RUN pip install awscli

ENTRYPOINT ["sh", "-c", "./entrypoint.sh"]

But when I deploy it to Fargate, the container stops before reaching the steady state with:

sh: 1: ./entrypoint.sh: not found

Edit: Adding entrypoint.sh file for clarification:

#!/bin/env sh
# start process, but it should exit once the file is in S3
/app/cat/sitemap_download.py
# Once the process is done, we are good to scale down the service
aws ecs update-service --cluster cluster_name --region eu-west-1 --service service-name --desired-count 0

I have tried modifying ENTRYPOINT to use it as exec form, or with full path but always get the same issue. Any ideas on what am I doing wrong?

Upvotes: 1

Views: 1859

Answers (1)

Arehandoro
Arehandoro

Reputation: 387

I've managed to fix it now.

Changing the Dockerfile to look as follows solves the issue:

COPY . /app

VOLUME /app

RUN chmod +x /app/cat/sitemap_download.py

COPY entrypoint.sh /app/entrypoint.sh

RUN chmod +x /app/entrypoint.sh

ARG VERSION=3.7.4

RUN apt update && \
       apt install -y bash wget && \
       wget -O /tmp/nordrepo.deb https://repo.nordvpn.com/deb/nordvpn/debian/pool/main/nordvpn-release_1.0.0_all.deb && \
       apt install -y /tmp/nordrepo.deb && \
       apt update && \
       apt install -y nordvpn=$VERSION && \
       apt remove -y wget nordvpn-release

RUN apt-get clean \
    && apt-get -y update
RUN apt-get -y install python3-dev \
    python3-psycopg2 \
    && apt-get -y install build-essential

RUN pip install --upgrade pip

RUN pip install -r cat/requirements.txt

RUN pip install awscli

ENTRYPOINT ["/bin/bash"]
CMD ["./entrypoint.sh"]

I tried this after reading: What is the difference between CMD and ENTRYPOINT in a Dockerfile?

I believe this syntax fixes it because with entrypoint I'm indicating bash to be run at start, and then passing the script as parameter.

Upvotes: 1

Related Questions