'entrypoint file not found

I have a docker image with this command:

FROM ruby:2.4-alpine
WORKDIR /usr/src/app

COPY Gemfile /usr/src/app/Gemfile
COPY Gemfile.lock /usr/src/app/Gemfile.lock

RUN bundle config build.nokogiri --use-system-libraries
RUN bundle install --without development test

VOLUME /state

COPY . /usr/src/app/

ENTRYPOINT ["api-entrypoint.sh"]
CMD ["foreman", "start"]

it builds correctly but when I try to run bash, for example, I get this container_linux.go:247: starting container process caused "exec: \"api-entrypoint.sh\": executable file not found in $PATH" docker: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "exec: \"api-entrypoint.sh\": executable file not found in $PATH".

I tried copy the entrypoint file, give it executable permissions as well with CMD...nothing worked



Solution 1:[1]

/usr/src/app may not be in your path so you should include the full path to the script. You also need to ensure that your entrypoint.sh is executable, docker will copy the permissions exactly as they are on your build host, so this step may not be needed depending on your scenario.

FROM ruby:2.4-alpine
WORKDIR /usr/src/app

COPY Gemfile /usr/src/app/Gemfile
COPY Gemfile.lock /usr/src/app/Gemfile.lock

RUN bundle config build.nokogiri --use-system-libraries
RUN bundle install --without development test

VOLUME /state

COPY . /usr/src/app/
RUN chmod 755 api-entrypoint.sh

ENTRYPOINT ["/usr/src/app/api-entrypoint.sh"]
CMD ["foreman", "start"]

Solution 2:[2]

I had this problem with Docker for Windows and the solution was changing the entrypoint script file from CRLF -> LF.

Solution 3:[3]

I had the same problem - the entrypoint was not found, but I was sure that it was there.

It seems that you can't use single quotes ' for the entrypoint/command.

So I changed from

ENTRYPOINT ['/foo/bar/script.sh']
CMD ['run']

to

ENTRYPOINT ["/foo/bar/script.sh"]
CMD ["run"]

and it works.

Solution 4:[4]

Another source of issues can be your shebang, if you have /bin/bash and you don't have bash in your image/base image it will tell your that your entrypoint is not found. This is one of the issues I ran into.

Solution 5:[5]

In my case I had an error:

> [27/35] RUN /entrypoint.sh:
#31 0.503 /bin/sh: 1: /entrypoint.sh: not found

I just run dos2unix command and the issue gone:

dos2unix entrypoint.sh

Solution 6:[6]

I had a multi-stage build with a golang application where this problem occured. The golang executable was build in builder stage (alpine image) and then copied to the next stage (debian image). In the second stage the error occured: 'mygoexecutable' not found or does not exist.

The reason was that the executable was not compatible with the image of the second stage due to having some cgo references only available in the builder stage. Afaik apline uses libc and the debian images use glibc. The solution is to use compatible images or to set the environment variable CGO_ENABLED=0 (disable cgo) while building the executable.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 BMitch
Solution 2 dsschneidermann
Solution 3 zarathustra
Solution 4 chpoit
Solution 5 Ilya Rudakov
Solution 6 volkit