ENTRYPOINT or CMD
Page content
TL;DR
Best practice: When your Docker container runs as a daemon, write entrypoint.sh and run it when container starts by ENTRYPOINT.
CMD can be overwritten.
When ENTRYPOINT, not CMD
Suppose you want to run a command when the Docker container starts.
In that case, you can use CMD.
The following code runs the command sleep 5 when the container starts.
FROM Ubuntu
CMD sleep 5
# or
# CMD ["sleep", "5"]
The arguments of CMD can be replaced when its run time command by:
docker run ubuntu-sleeper sleep 10
ENTRYPOINT can run a command when the container starts as well as CMD:
FROM Ubuntu
ENTRYPOINT ["sleep"]
Example usage:
docker run ubuntu-sleeper 5 # sleep + 5
If no argument is passed as an argument of the run command, it returns error because sleep has no operand.
Let’s make this sleep time 5 as variable, and the default command as sleep:
FROM Ubuntu
ENTRYPOINT ["sleep"]
CMD ["5"]
Now the default value is 5, but you can overwrite the ENTRYPOINT and CMD as follows:
docker run ubuntu-sleeper # sleep + 5
docker run ubuntu-sleeper 10 # sleep + 10
docker run --entrypoint sleep2.0 ubuntu-sleeper 10 #override entrypoint command