Reputation: 7229
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
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
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
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
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
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
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
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
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
Reputation: 2170
I had this problem with Docker for Windows and the solution was changing the entrypoint script file from CRLF -> LF.
Upvotes: 211
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
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