dockerbash - Making docker exec -it Suck Less
Docker is a container technology that allows you to package up a series of different technologies under (generally) a *nix style operating system. As things deployed with Docker are generally deployed under a *nix style operating system, it isn't uncommon to want to open a shell into your Docker environment for debugging purposes.
You can easily do this with:
docker exec -it CONTAINER_HASH /bin/bash
The CONTAINER_HASH is a value like 311ab7fe0ea1. This value is fetched from a docker ps command like this:
docker ps | grep police
The term 'police' is just some bit of text that identifies the docker process that is running.
Here's an example of this output:
❯ docker ps | grep police
311ab7fe0ea1 img-captain-police-crawl:51 "/bin/sh -c 'puma -C…" 4 hours ago Up 4 hours
What I'd really like is a command like this:
dockerbash police
and have that do the underlying work to generate the docker exec statement. A little bit of bash scripting gave me this script:
#!/bin/bash
if [ -z $1 ]; then
echo "You need to specify the name of the container you want to get into like:"
echo "dockerbash police"
else
pid=`docker ps | grep $1 | awk '{print $1}'`
docker exec -it $pid /bin/bash
fi
Save the lines above as dockerbash and make it executable. After that you can much more easily get a shell prompt inside your docker containers.
Bash References
Where Does dockerbash Live?
You cannot store dockerbash in the project that you are deploying via Docker because it needs to exist on the machine that runs your Docker containers, not within your Docker container. My recommendation is that you have your DevOps tooling such as Ansible install this script.