Sometimes you just want to keep up your container without running the intended process, for example to diagnose an unexpected shutdown during starting up the container’s process. To achieve that, we make use of the option in docker and docker-compose to overwrite the container’s innate command that is usually executed during your container’s runtime.
Preparing our experiment
First of all we gotta pull the docker image for our experiments. For illustration purposes we use an image that is completely unrelated to any command we’re going to use later:
docker pull maven:3.9.9-eclipse-temurin-8-alpine
That’s all. Now let’s head into our experiments.
docker container run COMMAND – parameter
When executing docker run we can not only set an image name but also add a custom command that overrides the image’s default command. Let me illustrate that by showing you the date of today as of writing this post – using maven’s docker image.
>docker run maven:3.9.9-eclipse-temurin-8-alpine date
Sat Mar 8 14:21:43 UTC 2025
where maven:3.9.9-eclipse-temurin-8-alpine is the docker image and date
the custom command that replaces the default mvn
execution.
docker compose directive – command:
Being a decorator on top of docker’s base CLI docker compose can do anything that plain docker run
can do. Thus we can do custom command executions here as well. In fact, it’s much more fun than using the default CLI. But thats just me. Now without further ado:
florian@ubuntu-jammy:~$ sudo docker compose up
[+] Running 1/1
✔ Container vagrant-maven-1 Created 0.0s
Attaching to maven-1
maven-1 | Sat Mar 8 15:05:16 UTC 2025
maven-1 exited with code 0
And there is our today’s date.
What commands can we use in docker?
In this section I present my favorite commands to keep my docker containers open. The most intuitive is probably:
sleep infinity
That one is pretty self-explanatory. We just sleep for an infinite amount of time or until we manually cancel the process. The constant infinity
is defined in the GNU world and serves us as a representation of positive infinity.
The next one is:
top
We just let your container dispay it’s realtime ressource usage thus keeping your container up and running. Time to docker exec
into it and do our thing. Little caveat: Some images may strike top
out to reduce the container’s size and to focus on it’s core business. If that’s the case, we should try my top-most favorite. This one should be available quite often and looks so cool:
tail -f /dev/null
That one waits on a neverending file and tries to spit out whatever it finds at the end of it – in this case dark and pure nothingness.
Final thoughts
This post was a personal matter of heart to me having had the use case several times. But since im getting old *sigh* I tended to forget what commands I can use. Now that’s finally a thing of the past. Give it a bookmark and it will keep reminding you as well. Do you have a favorite command to keep things up? Feel free to drop me a line in the comments down below. And if you still can’t get enough of Docker or Maven here are some recommendations just for you: My most recent star is this post about configuring TLS for HTTPS-secured Maven repos. And finally for the more docker-inclined people out there this post about docker ps – formatting might make your daily life a little simpler.
Have a sunny day!