Luiz E.
Luiz E.

Reputation: 7229

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

Upvotes: 96

Views: 196746

Answers (11)

Younes Belouche
Younes Belouche

Reputation: 1502

For me, it was a mistake in the volumes config. It was:

volumes:
  - ./myappname:/usr/src/app/

And I made like this:

volumes:
  - .:/usr/src/app/

I hope this helps.

Upvotes: 0

Ayush
Ayush

Reputation: 1369

The problem in my case was I used single quote ['/my-entrypoint.sh'] instead of double quotes ["/my-entrypoint.sh"].

- ['/my-entrypoint.sh']
+ ["/my-entrypoint.sh"]

I can't believe this is 2023 & docker doesn't parse single quotes...

Upvotes: -1

Pablo Santa Cruz
Pablo Santa Cruz

Reputation: 181280

For me solution was as simple as adding a new line at the end of entrypoint.sh file. I am using Docker on windows (v4.24.0) by the way.

Upvotes: 0

Radoslav
Radoslav

Reputation: 1455

If you use a variable in your ENTRYPOINT it might not get resolved. e.g.

ENTRYPOINT ["$WORKING_DIR/start.sh"]

This will not do variable substitution.

ENTRYPOINT ["sh", "-c", "$WORKING_DIR/start.sh"]

Upvotes: 1

mtirtapradja
mtirtapradja

Reputation: 139

On my case I do try to remove the EXEC command from the Dockerfile first to check if the .sh entry file exist. And I confirm that it is there.

When I try to run the .sh from inside the docker container it shows that the .sh file doesn't exist. So I try to run the .sh file using this command sh /path_to_entrypoint/your_sh_file.sh and it shows that there is an error in the .sh file.

After some researching I found the answer why there is an error on this post: https://stackoverflow.com/a/67836849/10835742

Upvotes: 1

volkit
volkit

Reputation: 1611

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.

Upvotes: 5

Ilya Rudakov
Ilya Rudakov

Reputation: 131

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

Upvotes: 13

chpoit
chpoit

Reputation: 319

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.

Upvotes: 19

dsschneidermann
dsschneidermann

Reputation: 2170

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

Upvotes: 211

zarathustra
zarathustra

Reputation: 2080

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.

Upvotes: 65

BMitch
BMitch

Reputation: 263549

/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"]

Upvotes: 45

Related Questions