entrypoint file not found
Asked Answered
G

11

92

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

Guava answered 9/6, 2017 at 14:51 Comment(1)
I'm using ADD and finally setting the correct permission for my entry script i.e: ADD entry.sh /entry.sh RUN chmod +x /entry.sh ENTRYPOINT /entry.shPeterkin
R
44

/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"]
Ratoon answered 9/6, 2017 at 15:30 Comment(3)
it works locally but for some reason, when deploying on Docker Cloud I keep seeing ERROR: api-1: Container command '/usr/src/app/api-entrypoint.sh' not found or does not exist.Guava
Are you deploying the same image (with the same image id)?Ratoon
oh, nevermind, I found the problem: alpine images, when using an entrypoint, should have #!/bin/sh not #!/bin/bash. silly mistakeGuava
L
189

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

Lulululuabourg answered 27/6, 2019 at 13:9 Comment(14)
Oh my effin word ... really ... works now thanks a bunch!Paviour
Wow, that's it. Thanks!!Breslau
Wow, how.... I was trying to troubleshoot this for almost an hour! Thanks!Incubator
That works! the file was created on ubuntu by another dev and I was working on the windows.Boardwalk
Thanks so much. Worked on Docker Desktop 2.5.0.0 (Engine 19.03.13)!Curlew
Thanks. How did you troubleshoot this?Anlage
change CRLF to LF: https://mcmap.net/q/92334/-visual-studio-code-how-to-show-line-endingsAnlage
thanks a lot your suggestion worked, you can simply use vs code for do same it have option in bottom right corner. to Switch between CRLF to LF and vice versa.Dogeared
I also had to checkout the entrypoint file again git checkout origin/master -- path/to/entrypoint.shApex
This almost feel surreal...Fog
This is sooooo absurd... Thanks for this.Kawasaki
You´re a saint. May your code be bug free, for eternity. ThySaintly
oh my effin word indeed. blessings unto you for bug free code foreverBiphenyl
I was just about to give up on this but you came as savior. Bundle of ThanksHyper
C
64

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.

Colombia answered 2/3, 2018 at 14:52 Comment(5)
That makes a difference. Thanks!Eh
this didn't make a difference for meNada
Deep down in my mind some voice was telling me that single quote can be a problem. However, I told myself single quote/double quote all are same here. But I was so wrong. After trying different things for almost 1 hour, I changed to double quote and voila...Eddieeddina
The reason for this is in the Dockerfile reference: Note: The exec form is parsed as a JSON array, which means that you must use double-quotes (“) around words not single-quotes (‘).Vierra
Worst 3 hours of my life, trying to figure out why the F it wouldn't find the file, THANKS!, can't stress it enough, THANKS!!Dallasdalli
R
44

/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"]
Ratoon answered 9/6, 2017 at 15:30 Comment(3)
it works locally but for some reason, when deploying on Docker Cloud I keep seeing ERROR: api-1: Container command '/usr/src/app/api-entrypoint.sh' not found or does not exist.Guava
Are you deploying the same image (with the same image id)?Ratoon
oh, nevermind, I found the problem: alpine images, when using an entrypoint, should have #!/bin/sh not #!/bin/bash. silly mistakeGuava
H
16

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.

Hargett answered 25/12, 2020 at 22:54 Comment(2)
this was my case as we migrated into alpine distro, so bash needs to be replaced by ash now, just a 'b' of differenceReincarnate
This, and the upvoted comment above... at first I tried installing bash but ultimately the solution for me was to change bash to sh in my script file: #!/usr/bin/env sh ... all the errors I faced up to this point were not this clear lol.Steelhead
D
13

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
Docent answered 11/6, 2021 at 19:1 Comment(1)
I wish I can upvote a hundred times.Teethe
A
4

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.

Aldric answered 25/4, 2022 at 13:6 Comment(0)
N
1

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://mcmap.net/q/242191/-quot-set-illegal-option-quot-on-one-host-but-not-the-other

Nevski answered 30/8, 2022 at 2:49 Comment(0)
A
1

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"]
Americana answered 22/2, 2023 at 10:55 Comment(0)
C
0

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.

Contemporize answered 15/10, 2023 at 15:4 Comment(0)
R
0

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.

Rademacher answered 30/4 at 11:26 Comment(0)
W
-1

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...

Wonky answered 14/12, 2023 at 13:23 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.