Docker run override entrypoint with shell script which accepts arguments

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:

  • Docker Swarm with etcd
  • Docker Best Practises: at what size application should you refrain from containerising?
  • Running Desktop Apps on Docker Containers on Windows 10
  • Update docker container when new image is getting released
  • Start a service in docker container failed,with error: Failed to get D-Bus connection: No connection to service manager
  • How to monitor docker containers log from non-root user?
  • 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

  • Docker dotnet image container do not allow me to rebuild after change
  • Having two images of docker for production and development
  • kubernetes and debugging it in general
  • Unable to Install PHP Zip Module via Docker Build
  • Elasticsearch Docker stop seems to ignore SIGKILL
  • ASP.NET 5: docker build with multi-projects solution
  • 2 Solutions collect form web for “Docker run override entrypoint with shell script which accepts arguments”

    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

    I am not sure you can do that according to the official docker documentation:

    Note: you can override the ENTRYPOINT setting using –entrypoint, but
    this can only set the binary to exec (no sh -c will be used).

    https://docs.docker.com/engine/reference/builder/#/environment-replacement

    Docker will be the best open platform for developers and sysadmins to build, ship, and run distributed applications.