Docker

How to Override Entrypoint Using Docker Run?

In Docker, when a container initiates, it runs the cmdlet specified in the entrypoint. It is such that any extra arguments specified in the “docker run” cmdlet are passed as arguments to the entrypoint cmdlet. This default behavior makes sure that the container executes the intended cmdlet automatically.

The entrypoint comes into effect when making/creating containers for target applications that require a consistent starting point. This makes sure that the container runs the vital initialization steps and executes the target cmdlet without any interruption.

This blog covers the below-listed content aspects:

What is Entrypoint in Docker?

The entrypoint corresponds to a configuration option that indicates the command to be executed when a container is initiated and is considered as a primary process in the container. This entrypoint can be allocated in the Dockerfile via the “ENTRYPOINT” keyword or can be inherited via the base image.

What is Docker Run?

The “docker run” cmdlet is a great tool for initiating the containers and provides a convenient approach to override the default entrypoint.

How to Override Entrypoint Using Docker Run?

For overriding the entrypoint via the “docker run” cmdlet, the “–entrypoint” flag followed by the desired cmdlet is utilized, specified in the below syntax that enables it to run a different cmdlet in the container.

Syntax

docker run --entrypoint <cmdlet> <image>

After executing this cmdlet, Docker initiates a new container utilizing the specified image and runs the given cmdlet as the primary process, thereby overriding the original entrypoint. This assists in executing various cmdlets or applying different tasks in the container.

Approaches for Writing Effective Entrypoint Scripts

When making entrypoint scripts, consider the following methodologies:

  • Shebang: Start the script with a shebang i.e., “#!/bin/bash” or “#!/bin/sh”.
  • Command-Line Arguments: Cope with the command-line arguments passed to the script using 1, 2, etc. These arguments can be included when executing the container via the “docker run” cmdlet.
  • Error Handling: Apply error handling approaches i.e., log error messages, for the end-user’s convenience.
  • Cleanup: Apply cleanup tasks before exiting the script.

What are the Best Methodologies for Overriding Entrypoint?

The below-listed methodologies can be considered for overriding Entrypoint:

  • Analyze and perform the initialization requirements of the container image.
  • Make sure that the signal propagation i.e., SIGTERM or SIGINT, and process management in the container is carried out in a streamline manner.
  • Opt for the relevant cmdlet for overriding the entrypoint with respect to the target usage.

Examples of Overriding Entrypoint Using Docker Run

Following are the demonstrations that involve overriding entrypoint utilizing the “docker run” cmdlet in different scenarios:

Example 1: Interactive Shell Session

In the development/troubleshooting phase, there can be a need to invoke an interactive shell session within the container. Overriding the entrypoint enables to launch/open a shell session directly via the following cmdlet:

docker run --entrypoint /bin/bash -it <image>

This cmdlet initiates the container with “/bin/bash” as the entrypoint and opens an interactive shell session via the “-it” flag.

Example 2: Executing Container with Alternative Cmdlet

In the case of a container image that initiates a web server as the default cmdlet, there might be a situation where there is a requirement to execute a different command within the container for testing, like executing a debugging tool. By overriding the entrypoint, it can be done conveniently:

docker run --entrypoint /bin/bash <image> -c "<cmdlet>"

This cmdlet initiates the container with “/bin/bash” as the entrypoint and runs the target cmdlet.

Example 3: Custom Initialization Tasks

At times, there might be a requirement to execute custom initialization tasks before running the main cmdlet i.e., migrating the data before initiating the server etc. In such a situation, a custom initialization script can be executed by overriding the entrypoint:

docker run --entrypoint /path/to/sample.sh <image>

This cmdlet runs the “sample.sh” script as the entrypoint, enabling the programmer to apply the setup tasks before the main cmdlet.

Alternative Approach: Overriding the Shell Script Entrypoints

For overriding the shell script entrypoint via the “docker run” cmdlet, specify the target cmdlet after the “–entrypoint” flag, as follows:

docker run --entrypoint <command> <image>

Conclusion

For overriding the entrypoint via the “docker run” cmdlet, the “–entrypoint” flag followed by the desired command is utilized. However, carrying out this overriding requires analyzing the container initialization requirements, opting for the relevant cmdlet for overriding the entrypoint, and ensuring streamlined signal propagation. This guide illustrated how to override the entrypoint using Docker run.

About the author

Umar Hassan

I am a Front-End Web Developer. Being a technical author, I try to learn new things and adapt with them every day. I am passionate to write about evolving software tools and technologies and make it understandable for the end-user.