Docker helper function to get a shell
Want to get your bash shell in a running docker container?
run: deit application
(deit, as in: ‘Docker Exec -IT’)
and will show you all running containers which have ‘application’ in the name.
Add the following function to your ~/.bashrc or ~/.zshrc
# Function to display matching containers and allow user selection
function deit {
container_query="$1"
shift 1
container_command="${@:-bash}" # Default to 'bash' if no command is provided
# Get the list of matching container names
matching_containers=($(docker ps --format '{{.Names}}' | grep "$container_query"))
count=${#matching_containers[@]}
if [ "$count" -eq 0 ]; then
echo "No containers found with '$container_query' in the name."
return 1
elif [ "$count" -eq 1 ]; then
container_name="${matching_containers[0]}"
echo "Found container: $container_name"
echo "Executing: docker exec -it $container_name $container_command"
docker exec -it "$container_name" $container_command
else
echo "Multiple containers found with '$container_query' in the name:"
for i in "${!matching_containers[@]}"; do
echo "$((i + 1)). ${matching_containers[i]}"
done
while true; do
read -p "Choose the number of the container you want to use: " choice
if [[ "$choice" =~ ^[0-9]+$ ]] && [ "$choice" -ge 1 ] && [ "$choice" -le "$count" ]; then
container_name="${matching_containers[$((choice - 1))]}"
echo "Selected container: $container_name"
echo "Executing: docker exec -it $container_name $container_command"
docker exec -it "$container_name" $container_command
break
else
echo "Invalid choice. Please try again."
fi
done
fi
}