Launch shell in Docker container via command line function
Add the following function somewhere where it will be picked up by your shell.
For example: ~/.bash_profile
Then use it like so:
$ deit api
Multiple containers found with 'api' in the name:
1. srv-captain--strippenkaart-api.1.ytwsvciqerfm3k0821tpowx23
2. srv-captain--verkooprapport-api.1.we0g3exhke86q2k2qgikzkmyk
3. srv-captain--trainingsomgeving-api.1.624q0sm2qkpbqxyn37osiq2er
4. srv-captain--funnelmonitor-api.1.phukkl9slxifjcvg3yx2ykdda
Choose the number of the container you want to use:
This is the bash function:
# in file ~/.bash_profile
# 'deit' as in: docker exec -it
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
}