I have entrypoint shell script which accepts arguments -a -b.
I have working docker-compose.yml file where I override tomcat's entrypoint with instruction:
entrypoint: /usr/local/tomcat/entrypoint.sh -a param1 -b param2
What is docker run alternative?
docker run --entrypoint "/usr/local/tomcat/entrypoint.sh -a param1 -b param2" tomcat:jre8
does not work
I get:
docker: Error response from daemon:
invalid header field value "oci runtime error: container_linux.go:247:
starting container process caused \"exec:
\\\"/usr/local/tomcat/entrypoint.sh -a param1 -b param2\\\":
stat /usr/local/tomcat/entrypoint.sh -a param1 -b param2:
no such file or directory\"\n".
FYI:
docker run --entrypoint "/usr/local/tomcat/entrypoint.sh" tomcat:jre8
works from Docker point of view, but obviously script fails
It is because of the quotes you're using around your command.
When you run docker run --entrypoint "/usr/local/tomcat/entrypoint.sh -a param1 -b param2" tomcat:jre8
Docker treats whatever is within those quotes as a single script file.
As you can see from the error:
stat /usr/local/tomcat/entrypoint.sh -a param1 -b param2:
no such file or directory\"\n".
It's trying to perform a stat
on the file before running it, so it knows if it exists.
Place the arguments to your entrypoint at the end of your docker command like so:
docker run --entrypoint <entrypoint.sh> <image:tag> <arg1> <arg2> <arg3>
Your command becomes:
docker run --entrypoint /usr/local/tomcat/entrypoint.sh tomcat:jre8 -a param1 -b param2
Have a look at the code snippets in the official documentation:
The ENTRYPOINT of an image is similar to a COMMAND because it specifies what executable to run when the container starts
https://docs.docker.com/engine/reference/run/#/entrypoint-default-command-to-execute-at-runtime