2014-11-19 08:29:56 -05:00
|
|
|
#!/bin/bash
|
2013-10-15 05:02:31 -04:00
|
|
|
#
|
|
|
|
# bash completion file for core docker commands
|
|
|
|
#
|
2014-11-19 08:29:56 -05:00
|
|
|
# This script provides completion of:
|
2013-10-15 05:02:31 -04:00
|
|
|
# - commands and their options
|
2013-12-30 20:09:42 -05:00
|
|
|
# - container ids and names
|
2013-10-15 05:02:31 -04:00
|
|
|
# - image repos and tags
|
|
|
|
# - filepaths
|
|
|
|
#
|
|
|
|
# To enable the completions either:
|
|
|
|
# - place this file in /etc/bash_completion.d
|
|
|
|
# or
|
2014-11-19 08:29:56 -05:00
|
|
|
# - copy this file to e.g. ~/.docker-completion.sh and add the line
|
|
|
|
# below to your .bashrc after bash completion features are loaded
|
|
|
|
# . ~/.docker-completion.sh
|
2013-10-15 05:02:31 -04:00
|
|
|
#
|
|
|
|
# Note:
|
|
|
|
# Currently, the completions will not work if the docker daemon is not
|
|
|
|
# bound to the default communication port/socket
|
|
|
|
# If the docker daemon is using a unix socket for communication your user
|
|
|
|
# must have access to the socket for the completions to function correctly
|
2014-12-30 13:18:21 -05:00
|
|
|
#
|
|
|
|
# Note for developers:
|
|
|
|
# Please arrange options sorted alphabetically by long name with the short
|
|
|
|
# options immediately following their corresponding long form.
|
|
|
|
# This order should be applied to lists, alternatives and code blocks.
|
2013-10-15 05:02:31 -04:00
|
|
|
|
2014-01-20 03:26:01 -05:00
|
|
|
__docker_q() {
|
|
|
|
docker 2>/dev/null "$@"
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
__docker_containers_all() {
|
|
|
|
local IFS=$'\n'
|
|
|
|
local containers=( $(__docker_q ps -aq --no-trunc) )
|
|
|
|
if [ "$1" ]; then
|
|
|
|
containers=( $(__docker_q inspect --format "{{if $1}}{{.Id}}{{end}}" "${containers[@]}") )
|
|
|
|
fi
|
|
|
|
local names=( $(__docker_q inspect --format '{{.Name}}' "${containers[@]}") )
|
|
|
|
names=( "${names[@]#/}" ) # trim off the leading "/" from the container names
|
|
|
|
unset IFS
|
|
|
|
COMPREPLY=( $(compgen -W "${names[*]} ${containers[*]}" -- "$cur") )
|
2013-10-15 05:02:31 -04:00
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
__docker_containers_running() {
|
|
|
|
__docker_containers_all '.State.Running'
|
2013-10-15 05:02:31 -04:00
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
__docker_containers_stopped() {
|
|
|
|
__docker_containers_all 'not .State.Running'
|
2013-10-15 05:02:31 -04:00
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
__docker_containers_pauseable() {
|
|
|
|
__docker_containers_all 'and .State.Running (not .State.Paused)'
|
2014-10-02 13:01:10 -04:00
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
__docker_containers_unpauseable() {
|
|
|
|
__docker_containers_all '.State.Paused'
|
2014-10-02 13:01:10 -04:00
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
__docker_image_repos() {
|
|
|
|
local repos="$(__docker_q images | awk 'NR>1 && $1 != "<none>" { print $1 }')"
|
|
|
|
COMPREPLY=( $(compgen -W "$repos" -- "$cur") )
|
2013-10-15 05:02:31 -04:00
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
__docker_image_repos_and_tags() {
|
|
|
|
local reposAndTags="$(__docker_q images | awk 'NR>1 && $1 != "<none>" { print $1; print $1":"$2 }')"
|
|
|
|
COMPREPLY=( $(compgen -W "$reposAndTags" -- "$cur") )
|
2013-10-15 05:02:31 -04:00
|
|
|
__ltrim_colon_completions "$cur"
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
__docker_image_repos_and_tags_and_ids() {
|
|
|
|
local images="$(__docker_q images -a --no-trunc | awk 'NR>1 { print $3; if ($1 != "<none>") { print $1; print $1":"$2 } }')"
|
|
|
|
COMPREPLY=( $(compgen -W "$images" -- "$cur") )
|
2013-10-15 05:02:31 -04:00
|
|
|
__ltrim_colon_completions "$cur"
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
__docker_containers_and_images() {
|
|
|
|
__docker_containers_all
|
|
|
|
local containers=( "${COMPREPLY[@]}" )
|
|
|
|
__docker_image_repos_and_tags_and_ids
|
|
|
|
COMPREPLY+=( "${containers[@]}" )
|
2013-10-15 05:02:31 -04:00
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
__docker_pos_first_nonflag() {
|
2014-01-11 03:00:03 -05:00
|
|
|
local argument_flags=$1
|
|
|
|
|
|
|
|
local counter=$cpos
|
|
|
|
while [ $counter -le $cword ]; do
|
|
|
|
if [ -n "$argument_flags" ] && eval "case '${words[$counter]}' in $argument_flags) true ;; *) false ;; esac"; then
|
|
|
|
(( counter++ ))
|
|
|
|
else
|
|
|
|
case "${words[$counter]}" in
|
|
|
|
-*)
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
break
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
fi
|
|
|
|
(( counter++ ))
|
|
|
|
done
|
|
|
|
|
|
|
|
echo $counter
|
|
|
|
}
|
|
|
|
|
2014-11-17 11:13:58 -05:00
|
|
|
__docker_resolve_hostname() {
|
|
|
|
command -v host >/dev/null 2>&1 || return
|
|
|
|
COMPREPLY=( $(host 2>/dev/null "${cur%:}" | awk '/has address/ {print $4}') )
|
|
|
|
}
|
|
|
|
|
|
|
|
__docker_capabilities() {
|
|
|
|
# The list of capabilities is defined in types.go, ALL was added manually.
|
|
|
|
COMPREPLY=( $( compgen -W "
|
|
|
|
ALL
|
|
|
|
AUDIT_CONTROL
|
|
|
|
AUDIT_WRITE
|
|
|
|
BLOCK_SUSPEND
|
|
|
|
CHOWN
|
|
|
|
DAC_OVERRIDE
|
|
|
|
DAC_READ_SEARCH
|
|
|
|
FOWNER
|
|
|
|
FSETID
|
|
|
|
IPC_LOCK
|
|
|
|
IPC_OWNER
|
|
|
|
KILL
|
|
|
|
LEASE
|
|
|
|
LINUX_IMMUTABLE
|
|
|
|
MAC_ADMIN
|
|
|
|
MAC_OVERRIDE
|
|
|
|
MKNOD
|
|
|
|
NET_ADMIN
|
|
|
|
NET_BIND_SERVICE
|
|
|
|
NET_BROADCAST
|
|
|
|
NET_RAW
|
|
|
|
SETFCAP
|
|
|
|
SETGID
|
|
|
|
SETPCAP
|
|
|
|
SETUID
|
|
|
|
SYS_ADMIN
|
|
|
|
SYS_BOOT
|
|
|
|
SYS_CHROOT
|
|
|
|
SYSLOG
|
|
|
|
SYS_MODULE
|
|
|
|
SYS_NICE
|
|
|
|
SYS_PACCT
|
|
|
|
SYS_PTRACE
|
|
|
|
SYS_RAWIO
|
|
|
|
SYS_RESOURCE
|
|
|
|
SYS_TIME
|
|
|
|
SYS_TTY_CONFIG
|
|
|
|
WAKE_ALARM
|
|
|
|
" -- "$cur" ) )
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_docker() {
|
2013-10-15 05:02:31 -04:00
|
|
|
case "$prev" in
|
|
|
|
-H)
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
|
|
|
COMPREPLY=( $( compgen -W "-H" -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
*)
|
2014-10-02 17:13:37 -04:00
|
|
|
COMPREPLY=( $( compgen -W "${commands[*]} help" -- "$cur" ) )
|
2013-10-15 05:02:31 -04:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_attach() {
|
2014-01-11 03:00:03 -05:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
|
|
|
COMPREPLY=( $( compgen -W "--no-stdin --sig-proxy" -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
local counter="$(__docker_pos_first_nonflag)"
|
|
|
|
if [ $cword -eq $counter ]; then
|
|
|
|
__docker_containers_running
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
2013-10-15 05:02:31 -04:00
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_build() {
|
2013-10-15 05:02:31 -04:00
|
|
|
case "$prev" in
|
2014-12-30 13:18:21 -05:00
|
|
|
--tag|-t)
|
2014-01-11 03:00:03 -05:00
|
|
|
__docker_image_repos_and_tags
|
2013-10-15 05:02:31 -04:00
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2014-12-30 13:18:21 -05:00
|
|
|
COMPREPLY=( $( compgen -W "--force-rm --no-cache --quiet -q --rm --tag -t" -- "$cur" ) )
|
2013-10-15 05:02:31 -04:00
|
|
|
;;
|
|
|
|
*)
|
2014-12-30 13:18:21 -05:00
|
|
|
local counter="$(__docker_pos_first_nonflag '--tag|-t')"
|
2014-01-11 03:00:03 -05:00
|
|
|
if [ $cword -eq $counter ]; then
|
2014-07-08 22:26:23 -04:00
|
|
|
_filedir -d
|
2014-01-11 03:00:03 -05:00
|
|
|
fi
|
2013-10-15 05:02:31 -04:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_commit() {
|
2013-10-15 05:02:31 -04:00
|
|
|
case "$prev" in
|
2014-12-30 13:18:21 -05:00
|
|
|
--author|-a|--message|-m|--run)
|
2013-10-15 05:02:31 -04:00
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2014-12-30 13:18:21 -05:00
|
|
|
COMPREPLY=( $( compgen -W "--author -a --message -m --run" -- "$cur" ) )
|
2013-10-15 05:02:31 -04:00
|
|
|
;;
|
|
|
|
*)
|
2014-12-30 13:18:21 -05:00
|
|
|
local counter=$(__docker_pos_first_nonflag '--author|-a|--message|-m|--run')
|
2013-10-15 05:02:31 -04:00
|
|
|
|
2014-01-11 03:00:03 -05:00
|
|
|
if [ $cword -eq $counter ]; then
|
2013-10-15 05:02:31 -04:00
|
|
|
__docker_containers_all
|
2014-01-11 03:00:03 -05:00
|
|
|
return
|
|
|
|
fi
|
|
|
|
(( counter++ ))
|
|
|
|
|
|
|
|
if [ $cword -eq $counter ]; then
|
|
|
|
__docker_image_repos_and_tags
|
|
|
|
return
|
2013-10-15 05:02:31 -04:00
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_cp() {
|
2014-01-11 03:00:03 -05:00
|
|
|
local counter=$(__docker_pos_first_nonflag)
|
|
|
|
if [ $cword -eq $counter ]; then
|
|
|
|
case "$cur" in
|
|
|
|
*:)
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
__docker_containers_all
|
|
|
|
COMPREPLY=( $( compgen -W "${COMPREPLY[*]}" -S ':' ) )
|
|
|
|
compopt -o nospace
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
fi
|
|
|
|
(( counter++ ))
|
|
|
|
|
|
|
|
if [ $cword -eq $counter ]; then
|
2013-10-15 05:02:31 -04:00
|
|
|
_filedir
|
2014-01-11 03:00:03 -05:00
|
|
|
return
|
2013-10-15 05:02:31 -04:00
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_create() {
|
2014-12-15 15:07:41 -05:00
|
|
|
_docker_run
|
2014-08-11 13:12:09 -04:00
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_diff() {
|
2014-01-11 03:00:03 -05:00
|
|
|
local counter=$(__docker_pos_first_nonflag)
|
|
|
|
if [ $cword -eq $counter ]; then
|
2013-10-15 05:02:31 -04:00
|
|
|
__docker_containers_all
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_events() {
|
2013-10-15 05:02:31 -04:00
|
|
|
case "$prev" in
|
2014-01-11 03:00:03 -05:00
|
|
|
--since)
|
2013-10-15 05:02:31 -04:00
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2013-12-23 14:43:54 -05:00
|
|
|
COMPREPLY=( $( compgen -W "--since" -- "$cur" ) )
|
2013-10-15 05:02:31 -04:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_exec() {
|
2014-09-16 14:46:24 -04:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2014-12-30 13:18:21 -05:00
|
|
|
COMPREPLY=( $( compgen -W "--detach -d --interactive -i -t --tty" -- "$cur" ) )
|
2014-09-16 14:46:24 -04:00
|
|
|
;;
|
|
|
|
*)
|
|
|
|
__docker_containers_running
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_export() {
|
2014-01-11 03:00:03 -05:00
|
|
|
local counter=$(__docker_pos_first_nonflag)
|
|
|
|
if [ $cword -eq $counter ]; then
|
2013-10-15 05:02:31 -04:00
|
|
|
__docker_containers_all
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_help() {
|
2014-01-11 03:00:03 -05:00
|
|
|
local counter=$(__docker_pos_first_nonflag)
|
|
|
|
if [ $cword -eq $counter ]; then
|
2014-10-02 17:13:37 -04:00
|
|
|
COMPREPLY=( $( compgen -W "${commands[*]}" -- "$cur" ) )
|
2013-10-15 05:02:31 -04:00
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_history() {
|
2014-01-11 03:00:03 -05:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2014-12-30 13:18:21 -05:00
|
|
|
COMPREPLY=( $( compgen -W "--no-trunc --quiet -q" -- "$cur" ) )
|
2014-01-11 03:00:03 -05:00
|
|
|
;;
|
|
|
|
*)
|
|
|
|
local counter=$(__docker_pos_first_nonflag)
|
|
|
|
if [ $cword -eq $counter ]; then
|
|
|
|
__docker_image_repos_and_tags_and_ids
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
2013-10-15 05:02:31 -04:00
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_images() {
|
2013-10-15 05:02:31 -04:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2014-12-30 13:18:21 -05:00
|
|
|
COMPREPLY=( $( compgen -W "--all -a --no-trunc --quiet -q" -- "$cur" ) )
|
2013-10-15 05:02:31 -04:00
|
|
|
;;
|
|
|
|
*)
|
2014-01-11 03:00:03 -05:00
|
|
|
local counter=$(__docker_pos_first_nonflag)
|
|
|
|
if [ $cword -eq $counter ]; then
|
2013-10-15 05:02:31 -04:00
|
|
|
__docker_image_repos
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_import() {
|
2014-01-11 03:00:03 -05:00
|
|
|
local counter=$(__docker_pos_first_nonflag)
|
|
|
|
if [ $cword -eq $counter ]; then
|
|
|
|
return
|
|
|
|
fi
|
|
|
|
(( counter++ ))
|
|
|
|
|
|
|
|
if [ $cword -eq $counter ]; then
|
|
|
|
__docker_image_repos_and_tags
|
|
|
|
return
|
|
|
|
fi
|
2013-10-15 05:02:31 -04:00
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_info() {
|
2013-10-15 05:02:31 -04:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_inspect() {
|
2014-01-11 03:00:03 -05:00
|
|
|
case "$prev" in
|
2014-12-30 13:18:21 -05:00
|
|
|
--format|-f)
|
2014-01-11 03:00:03 -05:00
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2014-12-30 13:18:21 -05:00
|
|
|
COMPREPLY=( $( compgen -W "--format -f" -- "$cur" ) )
|
2014-01-11 03:00:03 -05:00
|
|
|
;;
|
|
|
|
*)
|
|
|
|
__docker_containers_and_images
|
|
|
|
;;
|
|
|
|
esac
|
2013-10-15 05:02:31 -04:00
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_kill() {
|
2013-10-15 05:02:31 -04:00
|
|
|
__docker_containers_running
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_load() {
|
2014-12-29 13:21:45 -05:00
|
|
|
case "$prev" in
|
2014-12-30 13:18:21 -05:00
|
|
|
--input|-i)
|
2014-12-29 13:21:45 -05:00
|
|
|
_filedir
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2014-12-30 13:18:21 -05:00
|
|
|
COMPREPLY=( $( compgen -W "--input -i" -- "$cur" ) )
|
2014-12-29 13:21:45 -05:00
|
|
|
;;
|
|
|
|
esac
|
2014-01-11 03:00:03 -05:00
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_login() {
|
2013-10-15 05:02:31 -04:00
|
|
|
case "$prev" in
|
2014-12-30 13:18:21 -05:00
|
|
|
--email|-e|--password|-p|--username|-u)
|
2013-10-15 05:02:31 -04:00
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2014-12-30 13:18:21 -05:00
|
|
|
COMPREPLY=( $( compgen -W "--email -e --password -p --username -u" -- "$cur" ) )
|
2013-10-15 05:02:31 -04:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_logs() {
|
2014-01-11 03:00:03 -05:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2014-12-30 13:18:21 -05:00
|
|
|
COMPREPLY=( $( compgen -W "--follow -f" -- "$cur" ) )
|
2014-01-11 03:00:03 -05:00
|
|
|
;;
|
|
|
|
*)
|
|
|
|
local counter=$(__docker_pos_first_nonflag)
|
|
|
|
if [ $cword -eq $counter ]; then
|
|
|
|
__docker_containers_all
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
2013-10-15 05:02:31 -04:00
|
|
|
}
|
2014-10-02 17:13:37 -04:00
|
|
|
|
|
|
|
_docker_pause() {
|
2014-10-02 13:01:10 -04:00
|
|
|
local counter=$(__docker_pos_first_nonflag)
|
|
|
|
if [ $cword -eq $counter ]; then
|
2014-10-02 17:13:37 -04:00
|
|
|
__docker_containers_pauseable
|
2014-10-02 13:01:10 -04:00
|
|
|
fi
|
|
|
|
}
|
2013-10-15 05:02:31 -04:00
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_port() {
|
2014-01-11 03:00:03 -05:00
|
|
|
local counter=$(__docker_pos_first_nonflag)
|
|
|
|
if [ $cword -eq $counter ]; then
|
2013-10-15 05:02:31 -04:00
|
|
|
__docker_containers_all
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_ps() {
|
2013-10-15 05:02:31 -04:00
|
|
|
case "$prev" in
|
2014-12-30 13:18:21 -05:00
|
|
|
--before|--since)
|
2014-06-19 12:11:32 -04:00
|
|
|
__docker_containers_all
|
2014-01-11 03:00:03 -05:00
|
|
|
;;
|
|
|
|
-n)
|
2013-10-15 05:02:31 -04:00
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2014-12-30 13:18:21 -05:00
|
|
|
COMPREPLY=( $( compgen -W "--all -a --before --latest -l --no-trunc -n --quiet -q --size -s --since" -- "$cur" ) )
|
2013-10-15 05:02:31 -04:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_pull() {
|
2013-10-15 05:02:31 -04:00
|
|
|
case "$prev" in
|
2014-12-30 13:18:21 -05:00
|
|
|
--tag|-t)
|
2013-10-15 05:02:31 -04:00
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2014-12-30 13:18:21 -05:00
|
|
|
COMPREPLY=( $( compgen -W "--tag -t" -- "$cur" ) )
|
2013-10-15 05:02:31 -04:00
|
|
|
;;
|
|
|
|
*)
|
2014-12-30 13:18:21 -05:00
|
|
|
local counter=$(__docker_pos_first_nonflag '--tag|-t')
|
2014-01-11 03:00:03 -05:00
|
|
|
if [ $cword -eq $counter ]; then
|
|
|
|
__docker_image_repos_and_tags
|
|
|
|
fi
|
2013-10-15 05:02:31 -04:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_push() {
|
2014-01-11 03:00:03 -05:00
|
|
|
local counter=$(__docker_pos_first_nonflag)
|
|
|
|
if [ $cword -eq $counter ]; then
|
2014-06-19 12:11:32 -04:00
|
|
|
__docker_image_repos_and_tags
|
2014-01-11 03:00:03 -05:00
|
|
|
fi
|
2013-10-15 05:02:31 -04:00
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_restart() {
|
2013-10-15 05:02:31 -04:00
|
|
|
case "$prev" in
|
2014-12-30 13:18:21 -05:00
|
|
|
--time|-t)
|
2013-10-15 05:02:31 -04:00
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2014-12-30 13:18:21 -05:00
|
|
|
COMPREPLY=( $( compgen -W "--time -t" -- "$cur" ) )
|
2013-10-15 05:02:31 -04:00
|
|
|
;;
|
|
|
|
*)
|
|
|
|
__docker_containers_all
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_rm() {
|
2013-10-15 05:02:31 -04:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2014-12-30 13:18:21 -05:00
|
|
|
COMPREPLY=( $( compgen -W "--force -f --link -l --volumes -v" -- "$cur" ) )
|
2014-06-26 00:12:25 -04:00
|
|
|
return
|
2013-10-15 05:02:31 -04:00
|
|
|
;;
|
|
|
|
*)
|
2014-06-26 00:12:25 -04:00
|
|
|
for arg in "${COMP_WORDS[@]}"; do
|
|
|
|
case "$arg" in
|
2014-12-30 13:18:21 -05:00
|
|
|
--force|-f)
|
2014-06-26 00:12:25 -04:00
|
|
|
__docker_containers_all
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
done
|
2013-10-15 05:02:31 -04:00
|
|
|
__docker_containers_stopped
|
2014-06-26 00:12:25 -04:00
|
|
|
return
|
2013-10-15 05:02:31 -04:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_rmi() {
|
2014-01-11 03:00:03 -05:00
|
|
|
__docker_image_repos_and_tags_and_ids
|
2013-10-15 05:02:31 -04:00
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_run() {
|
2014-12-15 15:07:41 -05:00
|
|
|
local options_with_args="
|
|
|
|
--add-host
|
2014-12-30 13:18:21 -05:00
|
|
|
--attach -a
|
2014-12-15 15:07:41 -05:00
|
|
|
--cap-add
|
|
|
|
--cap-drop
|
|
|
|
--cidfile
|
|
|
|
--cpuset
|
2014-12-30 13:18:21 -05:00
|
|
|
--cpu-shares -c
|
2014-12-15 15:07:41 -05:00
|
|
|
--device
|
|
|
|
--dns
|
|
|
|
--dns-search
|
|
|
|
--entrypoint
|
2014-12-30 13:18:21 -05:00
|
|
|
--env -e
|
2014-12-15 15:07:41 -05:00
|
|
|
--env-file
|
|
|
|
--expose
|
2014-12-30 13:18:21 -05:00
|
|
|
--hostname -h
|
2014-12-29 13:21:45 -05:00
|
|
|
--ipc
|
2014-12-15 15:07:41 -05:00
|
|
|
--link
|
|
|
|
--lxc-conf
|
2014-12-29 13:21:45 -05:00
|
|
|
--mac-address
|
2014-12-30 13:18:21 -05:00
|
|
|
--memory -m
|
2014-12-15 15:07:41 -05:00
|
|
|
--name
|
|
|
|
--net
|
2014-12-30 13:18:21 -05:00
|
|
|
--publish -p
|
2014-12-15 15:07:41 -05:00
|
|
|
--restart
|
|
|
|
--security-opt
|
2014-12-30 13:18:21 -05:00
|
|
|
--user -u
|
2014-12-15 15:07:41 -05:00
|
|
|
--volumes-from
|
2014-12-30 13:18:21 -05:00
|
|
|
--volume -v
|
|
|
|
--workdir -w
|
2014-12-15 15:07:41 -05:00
|
|
|
"
|
|
|
|
|
|
|
|
local all_options="$options_with_args
|
2014-12-30 13:18:21 -05:00
|
|
|
--interactive -i
|
2014-12-15 15:07:41 -05:00
|
|
|
--privileged
|
2014-12-30 13:18:21 -05:00
|
|
|
--publish-all -P
|
|
|
|
--tty -t
|
2014-12-15 15:07:41 -05:00
|
|
|
"
|
|
|
|
|
|
|
|
[ "$command" = "run" ] && all_options="$all_options
|
2014-12-30 13:18:21 -05:00
|
|
|
--detach -d
|
2014-12-15 15:07:41 -05:00
|
|
|
--rm
|
|
|
|
--sig-proxy
|
|
|
|
"
|
|
|
|
|
2013-10-15 05:02:31 -04:00
|
|
|
case "$prev" in
|
2014-12-30 13:18:21 -05:00
|
|
|
--add-host)
|
|
|
|
case "$cur" in
|
|
|
|
*:)
|
|
|
|
__docker_resolve_hostname
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
;;
|
|
|
|
--attach|-a)
|
2014-06-29 01:09:23 -04:00
|
|
|
COMPREPLY=( $( compgen -W 'stdin stdout stderr' -- "$cur" ) )
|
|
|
|
return
|
|
|
|
;;
|
2014-12-30 13:18:21 -05:00
|
|
|
--cap-add|--cap-drop)
|
|
|
|
__docker_capabilities
|
2014-06-29 01:09:23 -04:00
|
|
|
return
|
2013-10-15 05:02:31 -04:00
|
|
|
;;
|
2014-12-30 13:18:21 -05:00
|
|
|
--cidfile|--env-file)
|
|
|
|
_filedir
|
2014-06-29 01:09:23 -04:00
|
|
|
return
|
2013-10-15 05:02:31 -04:00
|
|
|
;;
|
2014-12-30 13:18:21 -05:00
|
|
|
--device|-d|--volume)
|
2014-06-29 01:09:23 -04:00
|
|
|
case "$cur" in
|
|
|
|
*:*)
|
|
|
|
# TODO somehow do _filedir for stuff inside the image, if it's already specified (which is also somewhat difficult to determine)
|
|
|
|
;;
|
|
|
|
'')
|
|
|
|
COMPREPLY=( $( compgen -W '/' -- "$cur" ) )
|
|
|
|
compopt -o nospace
|
|
|
|
;;
|
|
|
|
/*)
|
|
|
|
_filedir
|
|
|
|
compopt -o nospace
|
|
|
|
;;
|
|
|
|
esac
|
2014-01-11 03:00:03 -05:00
|
|
|
return
|
|
|
|
;;
|
2014-12-30 13:18:21 -05:00
|
|
|
--env|-e)
|
2014-01-11 03:00:03 -05:00
|
|
|
COMPREPLY=( $( compgen -e -- "$cur" ) )
|
2014-06-29 01:09:23 -04:00
|
|
|
compopt -o nospace
|
|
|
|
return
|
|
|
|
;;
|
2014-12-29 13:21:45 -05:00
|
|
|
--ipc)
|
|
|
|
case "$cur" in
|
|
|
|
*:*)
|
|
|
|
cur="${cur#*:}"
|
|
|
|
__docker_containers_running
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
COMPREPLY=( $( compgen -W 'host container:' -- "$cur" ) )
|
|
|
|
if [ "$COMPREPLY" = "container:" ]; then
|
|
|
|
compopt -o nospace
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
return
|
|
|
|
;;
|
2014-06-29 01:09:23 -04:00
|
|
|
--link)
|
|
|
|
case "$cur" in
|
|
|
|
*:*)
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
__docker_containers_running
|
|
|
|
COMPREPLY=( $( compgen -W "${COMPREPLY[*]}" -S ':' ) )
|
|
|
|
compopt -o nospace
|
|
|
|
;;
|
|
|
|
esac
|
2014-01-11 03:00:03 -05:00
|
|
|
return
|
|
|
|
;;
|
2014-11-17 11:13:58 -05:00
|
|
|
--net)
|
|
|
|
case "$cur" in
|
|
|
|
container:*)
|
|
|
|
local cur=${cur#*:}
|
|
|
|
__docker_containers_all
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
COMPREPLY=( $( compgen -W "bridge none container: host" -- "$cur") )
|
|
|
|
if [ "${COMPREPLY[*]}" = "container:" ] ; then
|
|
|
|
compopt -o nospace
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
--restart)
|
|
|
|
case "$cur" in
|
|
|
|
on-failure:*)
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
COMPREPLY=( $( compgen -W "no on-failure on-failure: always" -- "$cur") )
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
--security-opt)
|
|
|
|
case "$cur" in
|
|
|
|
label:*:*)
|
|
|
|
;;
|
|
|
|
label:*)
|
|
|
|
local cur=${cur##*:}
|
|
|
|
COMPREPLY=( $( compgen -W "user: role: type: level: disable" -- "$cur") )
|
|
|
|
if [ "${COMPREPLY[*]}" != "disable" ] ; then
|
|
|
|
compopt -o nospace
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
COMPREPLY=( $( compgen -W "label apparmor" -S ":" -- "$cur") )
|
|
|
|
compopt -o nospace
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
return
|
|
|
|
;;
|
2014-12-30 13:18:21 -05:00
|
|
|
--volumes-from)
|
|
|
|
__docker_containers_all
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
--cpuset|--cpu-shares|-c|--dns|--dns-search|--entrypoint|--expose|--hostname|-h|--lxc-conf|--mac-address|--memory|-m|--name|-n|--publish|-p|--user|-u|--workdir|-w)
|
2013-10-15 05:02:31 -04:00
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2014-12-15 15:07:41 -05:00
|
|
|
COMPREPLY=( $( compgen -W "$all_options" -- "$cur" ) )
|
2013-10-15 05:02:31 -04:00
|
|
|
;;
|
|
|
|
*)
|
2014-12-15 15:07:41 -05:00
|
|
|
local counter=$( __docker_pos_first_nonflag $( echo $options_with_args | tr -d "\n" | tr " " "|" ) )
|
2013-10-15 05:02:31 -04:00
|
|
|
|
2014-01-11 03:00:03 -05:00
|
|
|
if [ $cword -eq $counter ]; then
|
|
|
|
__docker_image_repos_and_tags_and_ids
|
2013-10-15 05:02:31 -04:00
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_save() {
|
2014-12-29 13:21:45 -05:00
|
|
|
case "$prev" in
|
2014-12-30 13:18:21 -05:00
|
|
|
--output|-o)
|
2014-12-29 13:21:45 -05:00
|
|
|
_filedir
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
|
|
|
COMPREPLY=( $( compgen -W "-o --output" -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
__docker_image_repos_and_tags_and_ids
|
|
|
|
;;
|
|
|
|
esac
|
2014-01-11 03:00:03 -05:00
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_search() {
|
2014-01-11 03:00:03 -05:00
|
|
|
case "$prev" in
|
2014-12-30 13:18:21 -05:00
|
|
|
--stars|-s)
|
2014-01-11 03:00:03 -05:00
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2014-12-30 13:18:21 -05:00
|
|
|
COMPREPLY=( $( compgen -W "--automated --no-trunc --stars -s" -- "$cur" ) )
|
2014-01-11 03:00:03 -05:00
|
|
|
;;
|
|
|
|
esac
|
2013-10-15 05:02:31 -04:00
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_start() {
|
2014-01-11 03:00:03 -05:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2014-12-30 13:18:21 -05:00
|
|
|
COMPREPLY=( $( compgen -W "--attach -a --interactive -i" -- "$cur" ) )
|
2014-01-11 03:00:03 -05:00
|
|
|
;;
|
|
|
|
*)
|
|
|
|
__docker_containers_stopped
|
|
|
|
;;
|
|
|
|
esac
|
2013-10-15 05:02:31 -04:00
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_stop() {
|
2013-10-15 05:02:31 -04:00
|
|
|
case "$prev" in
|
2014-12-30 13:18:21 -05:00
|
|
|
--time|-t)
|
2013-10-15 05:02:31 -04:00
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2014-12-30 13:18:21 -05:00
|
|
|
COMPREPLY=( $( compgen -W "--time -t" -- "$cur" ) )
|
2013-10-15 05:02:31 -04:00
|
|
|
;;
|
|
|
|
*)
|
|
|
|
__docker_containers_running
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_tag() {
|
2014-01-11 03:00:03 -05:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2014-12-30 13:18:21 -05:00
|
|
|
COMPREPLY=( $( compgen -W "--force -f" -- "$cur" ) )
|
2014-01-11 03:00:03 -05:00
|
|
|
;;
|
|
|
|
*)
|
|
|
|
local counter=$(__docker_pos_first_nonflag)
|
|
|
|
|
|
|
|
if [ $cword -eq $counter ]; then
|
|
|
|
__docker_image_repos_and_tags
|
|
|
|
return
|
|
|
|
fi
|
|
|
|
(( counter++ ))
|
|
|
|
|
|
|
|
if [ $cword -eq $counter ]; then
|
|
|
|
__docker_image_repos_and_tags
|
|
|
|
return
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
2013-10-15 05:02:31 -04:00
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_unpause() {
|
2014-10-02 13:01:10 -04:00
|
|
|
local counter=$(__docker_pos_first_nonflag)
|
|
|
|
if [ $cword -eq $counter ]; then
|
2014-10-02 17:13:37 -04:00
|
|
|
__docker_containers_unpauseable
|
2014-10-02 13:01:10 -04:00
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_top() {
|
2014-01-11 03:00:03 -05:00
|
|
|
local counter=$(__docker_pos_first_nonflag)
|
|
|
|
if [ $cword -eq $counter ]; then
|
2013-10-15 05:02:31 -04:00
|
|
|
__docker_containers_running
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_version() {
|
2013-10-15 05:02:31 -04:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_wait() {
|
2013-10-15 05:02:31 -04:00
|
|
|
__docker_containers_all
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker() {
|
|
|
|
local commands=(
|
|
|
|
attach
|
|
|
|
build
|
|
|
|
commit
|
|
|
|
cp
|
|
|
|
create
|
|
|
|
diff
|
|
|
|
events
|
|
|
|
exec
|
|
|
|
export
|
|
|
|
history
|
|
|
|
images
|
|
|
|
import
|
|
|
|
info
|
|
|
|
insert
|
|
|
|
inspect
|
|
|
|
kill
|
|
|
|
load
|
|
|
|
login
|
|
|
|
logs
|
|
|
|
pause
|
|
|
|
port
|
|
|
|
ps
|
|
|
|
pull
|
|
|
|
push
|
|
|
|
restart
|
|
|
|
rm
|
|
|
|
rmi
|
|
|
|
run
|
|
|
|
save
|
|
|
|
search
|
|
|
|
start
|
|
|
|
stop
|
|
|
|
tag
|
|
|
|
top
|
|
|
|
unpause
|
|
|
|
version
|
|
|
|
wait
|
|
|
|
)
|
2013-10-15 05:02:31 -04:00
|
|
|
|
|
|
|
COMPREPLY=()
|
2014-01-11 03:00:03 -05:00
|
|
|
local cur prev words cword
|
2013-10-15 05:02:31 -04:00
|
|
|
_get_comp_words_by_ref -n : cur prev words cword
|
|
|
|
|
2014-11-19 08:29:56 -05:00
|
|
|
local command='docker' cpos=0
|
2014-01-11 03:00:03 -05:00
|
|
|
local counter=1
|
2013-10-15 05:02:31 -04:00
|
|
|
while [ $counter -lt $cword ]; do
|
2014-01-11 03:00:03 -05:00
|
|
|
case "${words[$counter]}" in
|
2013-10-15 05:02:31 -04:00
|
|
|
-H)
|
|
|
|
(( counter++ ))
|
|
|
|
;;
|
|
|
|
-*)
|
|
|
|
;;
|
|
|
|
*)
|
2014-01-11 03:00:03 -05:00
|
|
|
command="${words[$counter]}"
|
2013-10-15 05:02:31 -04:00
|
|
|
cpos=$counter
|
|
|
|
(( cpos++ ))
|
|
|
|
break
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
(( counter++ ))
|
|
|
|
done
|
|
|
|
|
|
|
|
local completions_func=_docker_${command}
|
|
|
|
declare -F $completions_func >/dev/null && $completions_func
|
|
|
|
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
|
|
|
complete -F _docker docker
|