9

I have this Dockerfile:

FROM 939fj39f3932.dkr.ecr.us-west-2.amazonaws.com/teros_keys:8e31674

WORKDIR /zoom

COPY app.sh .

ENTRYPOINT ["exec", "/zoom/app.sh"]
CMD []

I build it and it works fine. Then I run it with:

docker run --rm -d \
    -e "db_prefix=$db_prefix" \
    --name "$n" "$full_name"

and I get this error:

docker: Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused "exec: \"exec\": executable file not found in $PATH": unknown.

anyone know what's up with that?

3 Answers 3

6

I changed it to:

ENTRYPOINT ["bash", "/zoom/app.sh"]

and it worked, dunno why tho

Sign up to request clarification or add additional context in comments.

1 Comment

As stated in David's answer, exec is a built-in of the shell, not a standalone command. Also, a best practice to follow would be invoking /bin/bash, using the absolute path, that one does not need to rely on the PATH defined in the container.
6

When you use the JSON-array form of ENTRYPOINT (or CMD or RUN), the command is run exactly as-is. There is no shell handling at all. exec, though, is what the standard refers to as a "special built-in utility"; it only exists within the context of a shell. Docker winds up looking for a /bin/exec or /usr/bin/exec tool, and it's not there, yielding that error message.

If you can just run the script as is (it's executable and has a correct "shebang" line #!/bin/sh or similar) then you don't need a modifier like exec. You can just specify it directly

# No ENTRYPOINT
CMD ["/zoom/app.sh"]

Comments

0

In my case, the issue is I tried to use like this CMD ["ls -a"].

resolution: changed to CMD ["ls", "-a"]

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.