Last active
August 8, 2025 19:10
-
-
Save Guilhem7/f027ff5d8576f74bafa96d21cd3bfd89 to your computer and use it in GitHub Desktop.
fzf bash binding to enter runnning container
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
| ### Functions to preview docker process | |
| docker_preview_proc(){ | |
| AWK_SCRIPT=' | |
| BEGIN { | |
| # ANSI color codes | |
| red = "\033[91m"; # Bright Red | |
| blue = "\033[94m"; # Light Blue | |
| green = "\033[92m"; # Bright Green | |
| yellow = "\033[93m"; # Light Yellow | |
| bold = "\033[1m"; | |
| bold_blue = "\033[1;94m"; | |
| bold_green = "\033[1;92m"; | |
| bold_yellow= "\033[1;93m"; | |
| reset = "\033[0m"; | |
| } | |
| NR==1 { | |
| # Header line with bold colors | |
| printf "%s%-15s %-8s %s%s\n", bold, $1, $2, $3, reset; | |
| next; | |
| } | |
| { | |
| user = $1; | |
| pid = $2; | |
| $1 = ""; $2 = ""; | |
| cmd = substr($0, index($0, $3)); | |
| user_color = (user == "root") ? red : blue; | |
| printf "%s%-15s%s %s%-8s%s %s%s%s\n", user_color, user, reset, green, pid, reset, yellow, cmd, reset; | |
| } | |
| ' | |
| docker top "${1}" -eo user,pid,cmd |awk "${AWK_SCRIPT}" | |
| } | |
| export -f docker_preview_proc | |
| ### FZF Docker exec | |
| FZF_DOCKER_HEADER="Choose a docker container" | |
| FZF_DOCKER_FORMAT="{{.ID}} \t{{.Names}} \t{{.Image}} \t{{.Ports}}" | |
| __fzf_docker_exec__(){ | |
| local _docker_cmd _shell_to_use container container_id | |
| if ! type -p fzf &>/dev/null 2>&1;then | |
| echo -e "Please run: sudo apt install fzf" | |
| return 1 | |
| fi | |
| if [[ ! $(groups) =~ docker ]];then | |
| # Refresh / Enable sudo token | |
| sudo whoami &>/dev/null | |
| _docker_cmd="sudo docker" | |
| else | |
| _docker_cmd="docker" | |
| fi | |
| _shell_to_use=("bash" "sh" "ash") | |
| container=$($_docker_cmd ps --format "${FZF_DOCKER_FORMAT}" |fzf --reverse --header="${FZF_DOCKER_HEADER}" --preview 'bash -c "docker_preview_proc {1}"') | |
| if [ -n "${container}" ];then | |
| container_id=$(echo "${container}"|cut -d ' ' -f 1) | |
| for shell_to_run in "${_shell_to_use[@]}";do | |
| if $_docker_cmd exec "${container_id}" "${shell_to_run}" >/dev/null;then | |
| _run_shell="${shell_to_run}" | |
| break | |
| fi | |
| done | |
| if [ -n "${_run_shell}" ];then | |
| $_docker_cmd exec --user root -it "${container_id}" "${_run_shell}" | |
| else | |
| echo -e "No shell available in this docker" | |
| fi | |
| fi | |
| } | |
| # Press Alt + a to enter a running container | |
| bind -x '"\ea":__fzf_docker_exec__' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment