60 lines
1.7 KiB
Bash
60 lines
1.7 KiB
Bash
dex() {
|
|
clear
|
|
local container
|
|
|
|
container=$(
|
|
docker ps --format '{{.Names}}\t{{.Image}}\t{{.Status}}' |
|
|
sort |
|
|
fzf \
|
|
--delimiter=$'\t' \
|
|
--with-nth=1,2,3 \
|
|
--header=$'Ctrl-I: Inspect | Ctrl-L: Logs | Ctrl-R: Refresh | ?: Toggle Preview\n\nNAME\tIMAGE\tSTATUS' \
|
|
--tabstop=4 \
|
|
--height=100% \
|
|
--layout=reverse \
|
|
--border=rounded \
|
|
--info=inline-right \
|
|
--prompt='🐳 Container > ' \
|
|
--pointer='▶' \
|
|
--marker='✓' \
|
|
--preview 'docker logs -f --tail=50 {1} 2>&1' \
|
|
--preview-label=' Logs ' \
|
|
--preview-window='right,65%,follow,border-left,wrap' \
|
|
--bind 'ctrl-r:reload(docker ps --format "{{.Names}}\t{{.Image}}\t{{.Status}}" | sort)' \
|
|
--bind 'ctrl-u:preview-half-page-up' \
|
|
--bind 'ctrl-d:preview-half-page-down' \
|
|
--bind '?:toggle-preview' \
|
|
--bind 'ctrl-l:change-preview(docker logs -f --tail=50 {1} 2>&1)+change-preview-label(Logs)' \
|
|
--bind 'ctrl-i:change-preview(
|
|
docker inspect --format "
|
|
Name: {{.Name}}
|
|
Image: {{.Config.Image}}
|
|
Status: {{.State.Status}}
|
|
Running: {{.State.Running}}
|
|
Started: {{.State.StartedAt}}
|
|
Finished: {{.State.FinishedAt}}
|
|
PID: {{.State.Pid}}
|
|
Exit Code: {{.State.ExitCode}}
|
|
|
|
Networks:
|
|
{{range .NetworkSettings.Networks}} • {{.IPAddress}}
|
|
{{end}}
|
|
|
|
Mounts:
|
|
{{range .Mounts}} • {{.Source}} -> {{.Destination}}
|
|
{{end}}
|
|
" {1}
|
|
)+change-preview-label(Inspect)' |
|
|
cut -f1
|
|
) || return
|
|
|
|
docker exec -it "$container" sh -c '
|
|
for shell in bash ash zsh sh; do
|
|
command -v "$shell" >/dev/null 2>&1 && exec "$shell"
|
|
done
|
|
|
|
echo "No suitable shell found." >&2
|
|
exit 1
|
|
'
|
|
}
|