You may already know the exec
command, which allows you to execute a command inside of a running Docker container. This works excellent and will enable us to dive into a running container to inspect certain things like files in the file system, running processes, and other stuff. However, exec
does not work when the Docker container stopped already. The following lines will explain and demonstrate how to run commands in stopped Docker containers.
When we try to run /bin/sh
on a stopped container using docker exec
, Docker will throw a No such container
error. We have to transform the stopped Docker container into a new Docker image before we can inspect the internals of the container.
We can transform a container into a Docker image using the commit
command. All we need to know is the name or the identifier of the stopped container. (You can get a list of all stopped containers with docker ps -a
).
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS NAMES
0dfd54557799 ubuntu "/bin/bash" 25 seconds ago Exited (1) 4 seconds ago peaceful_feynman
Having the identifier 0dfd54557799
of the stopped container, we can create a new Docker image. The resulting image will have the same state as the previously stopped container. At this point, we use docker run
and overwrite the original entrypoint
to get a way into the container.
# Commit the stopped image
docker commit 0dfd54557799 debug/ubuntu
# now we have a new image
docker images list
REPOSITORY TAG IMAGE ID CREATED SIZE
debug/ubuntu <none> cc9db32dcc2d 2 seconds ago 64.3MB
# create a new container from the "broken" image
docker run -it --rm --entrypoint sh debug/ubuntu
# inside of the container we can inspect - for example, the file system
$ ls /app
App.dll
App.pdb
App.deps.json
# CTRL+D to exit the container
# delete the container and the image
docker image rm debug/ubuntu
Conclusion
Being able to run commands in stopped Docker containers is a great way to inspect and debug certain things in stopped Docker containers.
Did you like the article? Were all questions answered? Please let me know. 👇🏻