Last active
July 24, 2025 17:58
-
-
Save Cdaprod/b4d9167deaa015c2e0105af180c27528 to your computer and use it in GitHub Desktop.
Docker Exec Selector & Functioning Alias
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
##### dce example output ##### | |
## Select a service: | |
## 1) video-api | |
## 2) video-web | |
## ?# 1 | |
## Connecting to service: video-api | |
############################## | |
unalias dce | |
# V1: Docker Compose Exec with built-in service selectiondce() { | |
# Check if docker-compose.yml exists | |
if [[ ! -f "docker-compose.yaml" && ! -f "compose.yaml" ]]; then | |
echo "Error: No docker-compose.yml or compose.yml found in current directory" | |
return 1 | |
fi | |
# Get list of services | |
local services=($(docker-compose ps --services 2>/dev/null)) | |
if [[ ${#services[@]} -eq 0 ]]; then | |
echo "Error: No services found" | |
return 1 | |
elif [[ ${#services[@]} -eq 1 ]]; then | |
# Only one service, use it directly | |
echo "Connecting to service: ${services[1]}" | |
docker-compose exec "${services[1]}" "${@:-bash}" | |
else | |
# Multiple services, show selection menu | |
echo "Select a service:" | |
select service in "${services[@]}"; do | |
if [[ -n "$service" ]]; then | |
echo "Connecting to service: $service" | |
docker-compose exec "$service" "${@:-bash}" | |
break | |
else | |
echo "Invalid selection. Please try again." | |
fi | |
done | |
fi} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
##### `dce example interface` ##### | |
## Docker Compose Services: | |
## ======================== | |
## → video-api | |
## video-web | |
## Use ↑/↓ arrows (or j/k) to navigate, Enter to select, q to quit | |
################################### | |
# Ensure `dce` isn't already aliased | |
unalias dce | |
# V2: Interactive Docker Compose Exec with arrow key selection | |
dce() { | |
# Check if docker-compose files exist (check .yaml first, then .yml) | |
if [[ ! -f "docker-compose.yaml" && ! -f "compose.yaml" && ! -f "docker-compose.yml" && ! -f "compose.yml" ]]; then | |
echo "Error: No docker-compose.yaml/yml or compose.yaml/yml found in current directory" | |
return 1 | |
fi | |
# Get list of services | |
local services=($(docker-compose ps --services 2>/dev/null)) | |
if [[ ${#services[@]} -eq 0 ]]; then | |
echo "Error: No services found" | |
return 1 | |
elif [[ ${#services[@]} -eq 1 ]]; then | |
echo "Connecting to service: ${services[1]}" | |
_dce_exec "${services[1]}" "$@" | |
else | |
# Multiple services, show interactive arrow key selection | |
_dce_select_service "$@" | |
fi | |
} | |
# Interactive service selection with arrow keys | |
_dce_select_service() { | |
local services=($(docker-compose ps --services 2>/dev/null)) | |
local selected=1 | |
local total=${#services[@]} | |
# Function to display menu | |
_display_menu() { | |
clear | |
echo "Docker Compose Services:" | |
echo "========================" | |
for i in {1..$total}; do | |
if [[ $i -eq $selected ]]; then | |
echo "→ ${services[$i]}" | |
else | |
echo " ${services[$i]}" | |
fi | |
done | |
echo "" | |
echo "Use ↑/↓ arrows (or j/k) to navigate, Enter to select, q to quit" | |
} | |
# Initial display | |
_display_menu | |
# Read key input | |
while true; do | |
read -k key | |
case $key in | |
# Up arrow or k | |
$'\e[A'|'k') | |
((selected > 1)) && ((selected--)) | |
_display_menu | |
;; | |
# Down arrow or j | |
$'\e[B'|'j') | |
((selected < total)) && ((selected++)) | |
_display_menu | |
;; | |
# Enter | |
$'\n') | |
clear | |
echo "Connecting to service: ${services[$selected]}" | |
_dce_exec "${services[$selected]}" "$@" | |
break | |
;; | |
# Number keys (1-9) for quick selection | |
[1-9]) | |
if [[ $key -le $total ]]; then | |
selected=$key | |
clear | |
echo "Connecting to service: ${services[$selected]}" | |
_dce_exec "${services[$selected]}" "$@" | |
break | |
fi | |
;; | |
# Quit | |
'q'|'Q'|$'\e') | |
clear | |
echo "Cancelled" | |
return 0 | |
;; | |
esac | |
done | |
} | |
# Helper function to execute with shell fallback | |
_dce_exec() { | |
local service="$1" | |
shift | |
if [[ $# -gt 0 ]]; then | |
# User provided a specific command | |
docker-compose exec "$service" "$@" | |
else | |
# Try bash first, fallback to sh | |
echo "Trying bash shell..." | |
if ! docker-compose exec "$service" bash 2>/dev/null; then | |
echo "Bash not available, trying sh..." | |
docker-compose exec "$service" sh | |
fi | |
fi | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment