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
|
2015-07-30 10:09:24 -04:00
|
|
|
#
|
|
|
|
# Configuration:
|
|
|
|
#
|
2015-10-22 12:50:41 -04:00
|
|
|
# For several commands, the amount of completions can be configured by
|
|
|
|
# setting environment variables.
|
|
|
|
#
|
|
|
|
# DOCKER_COMPLETION_SHOW_NETWORK_IDS
|
2016-06-29 08:17:26 -04:00
|
|
|
# DOCKER_COMPLETION_SHOW_NODE_IDS
|
|
|
|
# DOCKER_COMPLETION_SHOW_SERVICE_IDS
|
2015-11-08 12:35:48 -05:00
|
|
|
# "no" - Show names only (default)
|
|
|
|
# "yes" - Show names and ids
|
2015-10-22 12:50:41 -04:00
|
|
|
#
|
2015-07-30 10:09:24 -04:00
|
|
|
# You can tailor completion for the "events", "history", "inspect", "run",
|
|
|
|
# "rmi" and "save" commands by settings the following environment
|
|
|
|
# variables:
|
2015-10-06 18:45:32 -04:00
|
|
|
#
|
2015-07-30 10:09:24 -04:00
|
|
|
# DOCKER_COMPLETION_SHOW_IMAGE_IDS
|
|
|
|
# "none" - Show names only (default)
|
|
|
|
# "non-intermediate" - Show names and ids, but omit intermediate image IDs
|
|
|
|
# "all" - Show names and ids, including intermediate image IDs
|
2015-10-06 18:45:32 -04:00
|
|
|
#
|
2015-07-30 10:09:24 -04:00
|
|
|
# DOCKER_COMPLETION_SHOW_TAGS
|
|
|
|
# "yes" - include tags in completion options (default)
|
|
|
|
# "no" - don't include tags in completion options
|
|
|
|
|
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:
|
2015-03-25 13:38:17 -04:00
|
|
|
# Please arrange options sorted alphabetically by long name with the short
|
2014-12-30 13:18:21 -05:00
|
|
|
# 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
|
|
|
|
2015-11-08 12:04:35 -05:00
|
|
|
__docker_previous_extglob_setting=$(shopt -p extglob)
|
|
|
|
shopt -s extglob
|
|
|
|
|
2014-01-20 03:26:01 -05:00
|
|
|
__docker_q() {
|
2015-08-03 12:53:51 -04:00
|
|
|
docker ${host:+-H "$host"} ${config:+--config "$config"} 2>/dev/null "$@"
|
2014-01-20 03:26:01 -05:00
|
|
|
}
|
|
|
|
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_containers_all() {
|
2014-10-02 17:13:37 -04:00
|
|
|
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
|
|
|
}
|
|
|
|
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_containers_running() {
|
|
|
|
__docker_complete_containers_all '.State.Running'
|
2013-10-15 05:02:31 -04:00
|
|
|
}
|
|
|
|
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_containers_stopped() {
|
|
|
|
__docker_complete_containers_all 'not .State.Running'
|
2013-10-15 05:02:31 -04:00
|
|
|
}
|
|
|
|
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_containers_pauseable() {
|
|
|
|
__docker_complete_containers_all 'and .State.Running (not .State.Paused)'
|
2014-10-02 13:01:10 -04:00
|
|
|
}
|
|
|
|
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_containers_unpauseable() {
|
|
|
|
__docker_complete_containers_all '.State.Paused'
|
2014-10-02 13:01:10 -04:00
|
|
|
}
|
|
|
|
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_container_names() {
|
2015-03-29 12:24:08 -04:00
|
|
|
local containers=( $(__docker_q ps -aq --no-trunc) )
|
|
|
|
local names=( $(__docker_q inspect --format '{{.Name}}' "${containers[@]}") )
|
|
|
|
names=( "${names[@]#/}" ) # trim off the leading "/" from the container names
|
|
|
|
COMPREPLY=( $(compgen -W "${names[*]}" -- "$cur") )
|
|
|
|
}
|
|
|
|
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_container_ids() {
|
2015-03-29 12:24:08 -04:00
|
|
|
local containers=( $(__docker_q ps -aq) )
|
|
|
|
COMPREPLY=( $(compgen -W "${containers[*]}" -- "$cur") )
|
|
|
|
}
|
|
|
|
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_images() {
|
2015-07-30 10:09:24 -04:00
|
|
|
local images_args=""
|
|
|
|
|
|
|
|
case "$DOCKER_COMPLETION_SHOW_IMAGE_IDS" in
|
|
|
|
all)
|
|
|
|
images_args="--no-trunc -a"
|
|
|
|
;;
|
|
|
|
non-intermediate)
|
|
|
|
images_args="--no-trunc"
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
local repo_print_command
|
|
|
|
if [ "${DOCKER_COMPLETION_SHOW_TAGS:-yes}" = "yes" ]; then
|
|
|
|
repo_print_command='print $1; print $1":"$2'
|
|
|
|
else
|
|
|
|
repo_print_command='print $1'
|
|
|
|
fi
|
|
|
|
|
|
|
|
local awk_script
|
|
|
|
case "$DOCKER_COMPLETION_SHOW_IMAGE_IDS" in
|
|
|
|
all|non-intermediate)
|
|
|
|
awk_script='NR>1 { print $3; if ($1 != "<none>") { '"$repo_print_command"' } }'
|
|
|
|
;;
|
|
|
|
none|*)
|
|
|
|
awk_script='NR>1 && $1 != "<none>" { '"$repo_print_command"' }'
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
local images=$(__docker_q images $images_args | awk "$awk_script")
|
|
|
|
COMPREPLY=( $(compgen -W "$images" -- "$cur") )
|
|
|
|
__ltrim_colon_completions "$cur"
|
|
|
|
}
|
|
|
|
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_image_repos() {
|
2014-10-02 17:13:37 -04:00
|
|
|
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
|
|
|
}
|
|
|
|
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_image_repos_and_tags() {
|
2014-10-02 17:13:37 -04:00
|
|
|
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"
|
|
|
|
}
|
|
|
|
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_containers_and_images() {
|
|
|
|
__docker_complete_containers_all
|
2014-10-02 17:13:37 -04:00
|
|
|
local containers=( "${COMPREPLY[@]}" )
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_images
|
2014-10-02 17:13:37 -04:00
|
|
|
COMPREPLY+=( "${containers[@]}" )
|
2013-10-15 05:02:31 -04:00
|
|
|
}
|
|
|
|
|
2016-01-26 13:57:38 -05:00
|
|
|
# Returns the names and optionally IDs of networks.
|
|
|
|
# The selection can be narrowed by an optional filter parameter, e.g. 'type=custom'
|
2015-10-11 11:08:44 -04:00
|
|
|
__docker_networks() {
|
2016-01-26 13:57:38 -05:00
|
|
|
local filter="$1"
|
2015-10-22 12:50:41 -04:00
|
|
|
# By default, only network names are completed.
|
2015-11-08 12:35:48 -05:00
|
|
|
# Set DOCKER_COMPLETION_SHOW_NETWORK_IDS=yes to also complete network IDs.
|
2015-10-22 12:50:41 -04:00
|
|
|
local fields='$2'
|
2015-11-08 12:35:48 -05:00
|
|
|
[ "${DOCKER_COMPLETION_SHOW_NETWORK_IDS}" = yes ] && fields='$1,$2'
|
2016-01-26 13:57:38 -05:00
|
|
|
__docker_q network ls --no-trunc ${filter:+-f "$filter"} | awk "NR>1 {print $fields}"
|
|
|
|
#__docker_q network ls --no-trunc | awk "NR>1 {print $fields}"
|
2015-12-15 10:07:13 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
__docker_complete_networks() {
|
2016-01-26 13:57:38 -05:00
|
|
|
COMPREPLY=( $(compgen -W "$(__docker_networks $@)" -- "$cur") )
|
2015-10-11 11:08:44 -04:00
|
|
|
}
|
|
|
|
|
2015-12-27 12:28:19 -05:00
|
|
|
__docker_complete_network_ids() {
|
|
|
|
COMPREPLY=( $(compgen -W "$(__docker_q network ls -q --no-trunc)" -- "$cur") )
|
|
|
|
}
|
|
|
|
|
|
|
|
__docker_complete_network_names() {
|
|
|
|
COMPREPLY=( $(compgen -W "$(__docker_q network ls | awk 'NR>1 {print $2}')" -- "$cur") )
|
|
|
|
}
|
|
|
|
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_containers_in_network() {
|
2015-11-15 16:31:13 -05:00
|
|
|
local containers=$(__docker_q network inspect -f '{{range $i, $c := .Containers}}{{$i}} {{$c.Name}} {{end}}' "$1")
|
|
|
|
COMPREPLY=( $(compgen -W "$containers" -- "$cur") )
|
|
|
|
}
|
|
|
|
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_volumes() {
|
2015-09-07 16:18:29 -04:00
|
|
|
COMPREPLY=( $(compgen -W "$(__docker_q volume ls -q)" -- "$cur") )
|
|
|
|
}
|
|
|
|
|
2015-12-15 10:07:13 -05:00
|
|
|
__docker_plugins() {
|
|
|
|
__docker_q info | sed -n "/^Plugins/,/^[^ ]/s/ $1: //p"
|
|
|
|
}
|
|
|
|
|
|
|
|
__docker_complete_plugins() {
|
|
|
|
COMPREPLY=( $(compgen -W "$(__docker_plugins $1)" -- "$cur") )
|
|
|
|
}
|
|
|
|
|
2016-06-03 12:12:20 -04:00
|
|
|
__docker_runtimes() {
|
|
|
|
__docker_q info | sed -n 's/^Runtimes: \(.*\)/\1/p'
|
|
|
|
}
|
|
|
|
|
|
|
|
__docker_complete_runtimes() {
|
|
|
|
COMPREPLY=( $(compgen -W "$(__docker_runtimes)" -- "$cur") )
|
|
|
|
}
|
|
|
|
|
2016-06-29 07:05:29 -04:00
|
|
|
# Returns a list of all nodes. Additional arguments to `docker node`
|
|
|
|
# may be specified in order to filter the node list, e.g.
|
|
|
|
# `__docker_nodes --filter role=manager`
|
2016-06-29 08:17:26 -04:00
|
|
|
# By default, only node names are completed.
|
|
|
|
# Set DOCKER_COMPLETION_SHOW_NODE_IDS=yes to also complete node IDs.
|
2016-06-29 07:05:29 -04:00
|
|
|
# An optional first argument `--id|--name` may be used to limit
|
2016-06-29 08:17:26 -04:00
|
|
|
# the output to the IDs or names of matching nodes. This setting takes
|
|
|
|
# precedence over the environment setting.
|
2016-06-12 13:05:22 -04:00
|
|
|
__docker_nodes() {
|
2016-06-29 08:17:26 -04:00
|
|
|
local fields='$2' # default: node name only
|
|
|
|
[ "${DOCKER_COMPLETION_SHOW_NODE_IDS}" = yes ] && fields='$1,$2' # ID and name
|
|
|
|
|
2016-06-29 07:05:29 -04:00
|
|
|
if [ "$1" = "--id" ] ; then
|
|
|
|
fields='$1' # IDs only
|
|
|
|
shift
|
|
|
|
elif [ "$1" = "--name" ] ; then
|
|
|
|
fields='$2' # names only
|
|
|
|
shift
|
|
|
|
fi
|
|
|
|
__docker_q node ls "$@" | tr -d '*' | awk "NR>1 {print $fields}"
|
2016-06-12 13:05:22 -04:00
|
|
|
}
|
|
|
|
|
2016-06-29 07:05:29 -04:00
|
|
|
# Applies completion of nodes based on the current value of `$cur` or
|
|
|
|
# the value of the optional first argument `--cur`, if given.
|
|
|
|
# Additional filters may be appended, see `__docker_nodes`.
|
2016-06-12 13:05:22 -04:00
|
|
|
__docker_complete_nodes() {
|
2016-06-29 07:05:29 -04:00
|
|
|
local current=$cur
|
|
|
|
if [ "$1" = "--cur" ] ; then
|
|
|
|
current="$2"
|
|
|
|
shift 2
|
|
|
|
fi
|
|
|
|
COMPREPLY=( $(compgen -W "$(__docker_nodes "$@")" -- "$current") )
|
2016-06-12 13:05:22 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
__docker_complete_nodes_plus_self() {
|
2016-06-29 07:05:29 -04:00
|
|
|
__docker_complete_nodes "$@"
|
|
|
|
COMPREPLY+=( self )
|
2016-06-12 13:05:22 -04:00
|
|
|
}
|
|
|
|
|
2016-06-29 07:05:29 -04:00
|
|
|
# Returns a list of all services. Additional arguments to `docker service ls`
|
|
|
|
# may be specified in order to filter the service list, e.g.
|
|
|
|
# `__docker_services --filter name=xxx`
|
2016-06-29 08:17:26 -04:00
|
|
|
# By default, only node names are completed.
|
|
|
|
# Set DOCKER_COMPLETION_SHOW_SERVICE_IDS=yes to also complete service IDs.
|
2016-06-29 07:05:29 -04:00
|
|
|
# An optional first argument `--id|--name` may be used to limit
|
2016-06-29 08:17:26 -04:00
|
|
|
# the output to the IDs or names of matching services. This setting takes
|
|
|
|
# precedence over the environment setting.
|
2016-06-12 13:05:22 -04:00
|
|
|
__docker_services() {
|
2016-06-29 08:17:26 -04:00
|
|
|
local fields='$2' # default: service name only
|
|
|
|
[ "${DOCKER_COMPLETION_SHOW_SERVICE_IDS}" = yes ] && fields='$1,$2' # ID & name
|
|
|
|
|
2016-06-29 07:05:29 -04:00
|
|
|
if [ "$1" = "--id" ] ; then
|
|
|
|
fields='$1' # IDs only
|
|
|
|
shift
|
|
|
|
elif [ "$1" = "--name" ] ; then
|
|
|
|
fields='$2' # names only
|
|
|
|
shift
|
|
|
|
fi
|
|
|
|
__docker_q service ls "$@" | awk "NR>1 {print $fields}"
|
2016-06-12 13:05:22 -04:00
|
|
|
}
|
|
|
|
|
2016-06-29 07:05:29 -04:00
|
|
|
# Applies completion of services based on the current value of `$cur` or
|
|
|
|
# the value of the optional first argument `--cur`, if given.
|
|
|
|
# Additional filters may be appended, see `__docker_services`.
|
2016-06-12 13:05:22 -04:00
|
|
|
__docker_complete_services() {
|
2016-06-29 07:05:29 -04:00
|
|
|
local current=$cur
|
|
|
|
if [ "$1" = "--cur" ] ; then
|
|
|
|
current="$2"
|
|
|
|
shift 2
|
|
|
|
fi
|
|
|
|
COMPREPLY=( $(compgen -W "$(__docker_services "$@")" -- "$current") )
|
|
|
|
}
|
|
|
|
|
|
|
|
# Appends the word passed as an argument to every word in `$COMPREPLY`.
|
|
|
|
# Normally you do this with `compgen -S`. This function exists so that you can use
|
|
|
|
# the __docker_complete_XXX functions in cases where you need a suffix.
|
|
|
|
__docker_append_to_completions() {
|
|
|
|
COMPREPLY=( ${COMPREPLY[@]/%/"$1"} )
|
2016-06-12 13:05:22 -04:00
|
|
|
}
|
|
|
|
|
2015-07-13 12:06:22 -04:00
|
|
|
# Finds the position of the first word that is neither option nor an option's argument.
|
|
|
|
# If there are options that require arguments, you should pass a glob describing those
|
|
|
|
# options, e.g. "--option1|-o|--option2"
|
|
|
|
# Use this function to restrict completions to exact positions after the argument list.
|
2014-10-02 17:13:37 -04:00
|
|
|
__docker_pos_first_nonflag() {
|
2014-01-11 03:00:03 -05:00
|
|
|
local argument_flags=$1
|
|
|
|
|
2015-10-11 09:32:47 -04:00
|
|
|
local counter=$((${subcommand_pos:-${command_pos}} + 1))
|
2014-01-11 03:00:03 -05:00
|
|
|
while [ $counter -le $cword ]; do
|
|
|
|
if [ -n "$argument_flags" ] && eval "case '${words[$counter]}' in $argument_flags) true ;; *) false ;; esac"; then
|
|
|
|
(( counter++ ))
|
2015-07-13 12:06:22 -04:00
|
|
|
# eat "=" in case of --option=arg syntax
|
|
|
|
[ "${words[$counter]}" = "=" ] && (( counter++ ))
|
2014-01-11 03:00:03 -05:00
|
|
|
else
|
|
|
|
case "${words[$counter]}" in
|
|
|
|
-*)
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
break
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
fi
|
2015-07-13 12:06:22 -04:00
|
|
|
|
|
|
|
# Bash splits words at "=", retaining "=" as a word, examples:
|
|
|
|
# "--debug=false" => 3 words, "--log-opt syslog-facility=daemon" => 4 words
|
|
|
|
while [ "${words[$counter + 1]}" = "=" ] ; do
|
|
|
|
counter=$(( counter + 2))
|
|
|
|
done
|
|
|
|
|
2014-01-11 03:00:03 -05:00
|
|
|
(( counter++ ))
|
|
|
|
done
|
|
|
|
|
|
|
|
echo $counter
|
|
|
|
}
|
|
|
|
|
2016-01-18 12:37:12 -05:00
|
|
|
# If we are currently completing the value of a map option (key=value)
|
|
|
|
# which matches the extglob given as an argument, returns key.
|
|
|
|
# This function is needed for key-specific completions.
|
|
|
|
__docker_map_key_of_current_option() {
|
|
|
|
local glob="$1"
|
|
|
|
|
|
|
|
local key glob_pos
|
|
|
|
if [ "$cur" = "=" ] ; then # key= case
|
|
|
|
key="$prev"
|
|
|
|
glob_pos=$((cword - 2))
|
|
|
|
elif [[ $cur == *=* ]] ; then # key=value case (OSX)
|
|
|
|
key=${cur%=*}
|
|
|
|
glob_pos=$((cword - 1))
|
|
|
|
elif [ "$prev" = "=" ] ; then
|
|
|
|
key=${words[$cword - 2]} # key=value case
|
|
|
|
glob_pos=$((cword - 3))
|
|
|
|
else
|
|
|
|
return
|
|
|
|
fi
|
|
|
|
|
|
|
|
[ "${words[$glob_pos]}" = "=" ] && ((glob_pos--)) # --option=key=value syntax
|
|
|
|
|
|
|
|
[[ ${words[$glob_pos]} == @($glob) ]] && echo "$key"
|
|
|
|
}
|
|
|
|
|
2015-07-13 11:28:25 -04:00
|
|
|
# Returns the value of the first option matching option_glob.
|
|
|
|
# Valid values for option_glob are option names like '--log-level' and
|
|
|
|
# globs like '--log-level|-l'
|
|
|
|
# Only positions between the command and the current word are considered.
|
|
|
|
__docker_value_of_option() {
|
2015-09-16 12:09:35 -04:00
|
|
|
local option_extglob=$(__docker_to_extglob "$1")
|
2015-07-13 11:28:25 -04:00
|
|
|
|
|
|
|
local counter=$((command_pos + 1))
|
|
|
|
while [ $counter -lt $cword ]; do
|
|
|
|
case ${words[$counter]} in
|
2015-09-16 12:09:35 -04:00
|
|
|
$option_extglob )
|
2015-07-13 11:28:25 -04:00
|
|
|
echo ${words[$counter + 1]}
|
|
|
|
break
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
(( counter++ ))
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2015-01-19 12:35:40 -05:00
|
|
|
# Transforms a multiline list of strings into a single line string
|
|
|
|
# with the words separated by "|".
|
|
|
|
# This is used to prepare arguments to __docker_pos_first_nonflag().
|
|
|
|
__docker_to_alternatives() {
|
|
|
|
local parts=( $1 )
|
|
|
|
local IFS='|'
|
|
|
|
echo "${parts[*]}"
|
|
|
|
}
|
|
|
|
|
|
|
|
# Transforms a multiline list of options into an extglob pattern
|
|
|
|
# suitable for use in case statements.
|
|
|
|
__docker_to_extglob() {
|
|
|
|
local extglob=$( __docker_to_alternatives "$1" )
|
|
|
|
echo "@($extglob)"
|
|
|
|
}
|
|
|
|
|
2015-10-11 09:32:47 -04:00
|
|
|
# Subcommand processing.
|
|
|
|
# Locates the first occurrence of any of the subcommands contained in the
|
|
|
|
# first argument. In case of a match, calls the corresponding completion
|
|
|
|
# function and returns 0.
|
|
|
|
# If no match is found, 1 is returned. The calling function can then
|
|
|
|
# continue processing its completion.
|
|
|
|
#
|
|
|
|
# TODO if the preceding command has options that accept arguments and an
|
|
|
|
# argument is equal ot one of the subcommands, this is falsely detected as
|
|
|
|
# a match.
|
|
|
|
__docker_subcommands() {
|
|
|
|
local subcommands="$1"
|
|
|
|
|
|
|
|
local counter=$(($command_pos + 1))
|
|
|
|
while [ $counter -lt $cword ]; do
|
|
|
|
case "${words[$counter]}" in
|
|
|
|
$(__docker_to_extglob "$subcommands") )
|
|
|
|
subcommand_pos=$counter
|
|
|
|
local subcommand=${words[$counter]}
|
|
|
|
local completions_func=_docker_${command}_${subcommand}
|
|
|
|
declare -F $completions_func >/dev/null && $completions_func
|
|
|
|
return 0
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
(( counter++ ))
|
|
|
|
done
|
|
|
|
return 1
|
|
|
|
}
|
|
|
|
|
2015-09-22 15:17:30 -04:00
|
|
|
# suppress trailing whitespace
|
|
|
|
__docker_nospace() {
|
|
|
|
# compopt is not available in ancient bash versions
|
|
|
|
type compopt &>/dev/null && compopt -o nospace
|
|
|
|
}
|
|
|
|
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_resolved_hostname() {
|
2014-11-17 11:13:58 -05:00
|
|
|
command -v host >/dev/null 2>&1 || return
|
|
|
|
COMPREPLY=( $(host 2>/dev/null "${cur%:}" | awk '/has address/ {print $4}') )
|
|
|
|
}
|
|
|
|
|
2016-08-05 12:56:17 -04:00
|
|
|
__docker_local_interfaces() {
|
|
|
|
command -v ip >/dev/null 2>&1 || return
|
|
|
|
ip addr show scope global 2>/dev/null | sed -n 's| \+inet \([0-9.]\+\).* \([^ ]\+\)|\1 \2|p'
|
|
|
|
}
|
|
|
|
|
|
|
|
__docker_complete_local_interfaces() {
|
|
|
|
local additional_interface
|
|
|
|
if [ "$1" = "--add" ] ; then
|
|
|
|
additional_interface="$2"
|
|
|
|
fi
|
|
|
|
|
|
|
|
COMPREPLY=( $( compgen -W "$(__docker_local_interfaces) $additional_interface" -- "$cur" ) )
|
|
|
|
}
|
|
|
|
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_capabilities() {
|
2014-11-17 11:13:58 -05:00
|
|
|
# The list of capabilities is defined in types.go, ALL was added manually.
|
|
|
|
COMPREPLY=( $( compgen -W "
|
|
|
|
ALL
|
|
|
|
AUDIT_CONTROL
|
|
|
|
AUDIT_WRITE
|
2015-02-11 02:46:32 -05:00
|
|
|
AUDIT_READ
|
2014-11-17 11:13:58 -05:00
|
|
|
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" ) )
|
|
|
|
}
|
|
|
|
|
2016-01-14 15:47:48 -05:00
|
|
|
__docker_complete_detach-keys() {
|
|
|
|
case "$prev" in
|
|
|
|
--detach-keys)
|
|
|
|
case "$cur" in
|
|
|
|
*,)
|
|
|
|
COMPREPLY=( $( compgen -W "${cur}ctrl-" -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
COMPREPLY=( $( compgen -W "ctrl-" -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
__docker_nospace
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
return 1
|
|
|
|
}
|
|
|
|
|
2016-01-05 12:53:16 -05:00
|
|
|
__docker_complete_isolation() {
|
|
|
|
COMPREPLY=( $( compgen -W "default hyperv process" -- "$cur" ) )
|
|
|
|
}
|
|
|
|
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_log_drivers() {
|
2015-07-13 10:59:34 -04:00
|
|
|
COMPREPLY=( $( compgen -W "
|
2015-10-23 04:46:32 -04:00
|
|
|
awslogs
|
2016-02-21 12:58:42 -05:00
|
|
|
etwlogs
|
2015-07-13 10:59:34 -04:00
|
|
|
fluentd
|
2015-12-18 12:43:32 -05:00
|
|
|
gcplogs
|
2015-07-13 10:59:34 -04:00
|
|
|
gelf
|
|
|
|
journald
|
|
|
|
json-file
|
|
|
|
none
|
2015-08-27 19:03:46 -04:00
|
|
|
splunk
|
2015-07-13 10:59:34 -04:00
|
|
|
syslog
|
|
|
|
" -- "$cur" ) )
|
|
|
|
}
|
|
|
|
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_log_options() {
|
2015-07-13 11:28:25 -04:00
|
|
|
# see docs/reference/logging/index.md
|
2015-08-04 20:35:06 -04:00
|
|
|
local awslogs_options="awslogs-region awslogs-group awslogs-stream"
|
2016-03-25 06:31:48 -04:00
|
|
|
local fluentd_options="env fluentd-address fluentd-async-connect fluentd-buffer-limit fluentd-retry-wait fluentd-max-retries labels tag"
|
2015-12-18 12:43:32 -05:00
|
|
|
local gcplogs_options="env gcp-log-cmd gcp-project labels"
|
2016-03-16 10:58:58 -04:00
|
|
|
local gelf_options="env gelf-address gelf-compression-level gelf-compression-type labels tag"
|
2016-01-28 02:41:37 -05:00
|
|
|
local journald_options="env labels tag"
|
2015-10-23 04:46:32 -04:00
|
|
|
local json_file_options="env labels max-file max-size"
|
2016-07-20 15:27:06 -04:00
|
|
|
local syslog_options="env labels syslog-address syslog-facility syslog-format syslog-tls-ca-cert syslog-tls-cert syslog-tls-key syslog-tls-skip-verify tag"
|
2015-11-10 19:42:27 -05:00
|
|
|
local splunk_options="env labels splunk-caname splunk-capath splunk-index splunk-insecureskipverify splunk-source splunk-sourcetype splunk-token splunk-url tag"
|
2015-10-23 04:46:32 -04:00
|
|
|
|
2015-12-18 12:43:32 -05:00
|
|
|
local all_options="$fluentd_options $gcplogs_options $gelf_options $journald_options $json_file_options $syslog_options $splunk_options"
|
2015-07-23 08:19:13 -04:00
|
|
|
|
2015-07-13 11:28:25 -04:00
|
|
|
case $(__docker_value_of_option --log-driver) in
|
2015-07-23 08:19:13 -04:00
|
|
|
'')
|
2015-10-23 04:46:32 -04:00
|
|
|
COMPREPLY=( $( compgen -W "$all_options" -S = -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
awslogs)
|
|
|
|
COMPREPLY=( $( compgen -W "$awslogs_options" -S = -- "$cur" ) )
|
2015-07-23 08:19:13 -04:00
|
|
|
;;
|
2015-07-13 11:28:25 -04:00
|
|
|
fluentd)
|
2015-07-23 08:19:13 -04:00
|
|
|
COMPREPLY=( $( compgen -W "$fluentd_options" -S = -- "$cur" ) )
|
2015-07-13 11:28:25 -04:00
|
|
|
;;
|
2015-12-18 12:43:32 -05:00
|
|
|
gcplogs)
|
|
|
|
COMPREPLY=( $( compgen -W "$gcplogs_options" -S = -- "$cur" ) )
|
|
|
|
;;
|
2015-07-13 11:28:25 -04:00
|
|
|
gelf)
|
2015-07-23 08:19:13 -04:00
|
|
|
COMPREPLY=( $( compgen -W "$gelf_options" -S = -- "$cur" ) )
|
2015-07-13 11:28:25 -04:00
|
|
|
;;
|
2015-10-23 04:46:32 -04:00
|
|
|
journald)
|
|
|
|
COMPREPLY=( $( compgen -W "$journald_options" -S = -- "$cur" ) )
|
|
|
|
;;
|
2015-08-12 07:37:16 -04:00
|
|
|
json-file)
|
|
|
|
COMPREPLY=( $( compgen -W "$json_file_options" -S = -- "$cur" ) )
|
|
|
|
;;
|
2015-07-13 11:28:25 -04:00
|
|
|
syslog)
|
2015-07-23 08:19:13 -04:00
|
|
|
COMPREPLY=( $( compgen -W "$syslog_options" -S = -- "$cur" ) )
|
2015-07-13 11:28:25 -04:00
|
|
|
;;
|
2015-08-27 19:03:46 -04:00
|
|
|
splunk)
|
|
|
|
COMPREPLY=( $( compgen -W "$splunk_options" -S = -- "$cur" ) )
|
|
|
|
;;
|
2015-07-13 11:28:25 -04:00
|
|
|
*)
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2015-09-22 15:17:30 -04:00
|
|
|
__docker_nospace
|
2015-07-13 11:28:25 -04:00
|
|
|
}
|
|
|
|
|
2015-07-20 14:46:18 -04:00
|
|
|
__docker_complete_log_driver_options() {
|
2016-02-07 13:05:43 -05:00
|
|
|
local key=$(__docker_map_key_of_current_option '--log-opt')
|
|
|
|
case "$key" in
|
2016-03-25 06:31:48 -04:00
|
|
|
fluentd-async-connect)
|
|
|
|
COMPREPLY=( $( compgen -W "false true" -- "${cur##*=}" ) )
|
|
|
|
return
|
|
|
|
;;
|
2016-02-07 13:05:43 -05:00
|
|
|
gelf-address)
|
|
|
|
COMPREPLY=( $( compgen -W "udp" -S "://" -- "${cur##*=}" ) )
|
2015-09-22 15:17:30 -04:00
|
|
|
__docker_nospace
|
2015-07-20 14:46:18 -04:00
|
|
|
return
|
|
|
|
;;
|
2016-03-16 10:58:58 -04:00
|
|
|
gelf-compression-level)
|
|
|
|
COMPREPLY=( $( compgen -W "1 2 3 4 5 6 7 8 9" -- "${cur##*=}" ) )
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
gelf-compression-type)
|
|
|
|
COMPREPLY=( $( compgen -W "gzip none zlib" -- "${cur##*=}" ) )
|
|
|
|
return
|
|
|
|
;;
|
2016-02-07 13:05:43 -05:00
|
|
|
syslog-address)
|
|
|
|
COMPREPLY=( $( compgen -W "tcp:// tcp+tls:// udp:// unix://" -- "${cur##*=}" ) )
|
2015-09-22 15:17:30 -04:00
|
|
|
__docker_nospace
|
2016-01-24 11:41:22 -05:00
|
|
|
__ltrim_colon_completions "${cur}"
|
2015-07-20 14:46:18 -04:00
|
|
|
return
|
|
|
|
;;
|
2016-02-07 13:05:43 -05:00
|
|
|
syslog-facility)
|
2015-07-20 14:46:18 -04:00
|
|
|
COMPREPLY=( $( compgen -W "
|
|
|
|
auth
|
|
|
|
authpriv
|
|
|
|
cron
|
|
|
|
daemon
|
|
|
|
ftp
|
|
|
|
kern
|
|
|
|
local0
|
|
|
|
local1
|
|
|
|
local2
|
|
|
|
local3
|
|
|
|
local4
|
|
|
|
local5
|
|
|
|
local6
|
|
|
|
local7
|
|
|
|
lpr
|
|
|
|
mail
|
|
|
|
news
|
|
|
|
syslog
|
|
|
|
user
|
|
|
|
uucp
|
2016-02-07 13:05:43 -05:00
|
|
|
" -- "${cur##*=}" ) )
|
2015-07-20 14:46:18 -04:00
|
|
|
return
|
|
|
|
;;
|
2016-04-08 07:19:25 -04:00
|
|
|
syslog-format)
|
|
|
|
COMPREPLY=( $( compgen -W "rfc3164 rfc5424 rfc5424micro" -- "${cur##*=}" ) )
|
|
|
|
return
|
|
|
|
;;
|
2016-06-13 05:12:31 -04:00
|
|
|
syslog-tls-ca-cert|syslog-tls-cert|syslog-tls-key)
|
2016-01-24 11:41:22 -05:00
|
|
|
_filedir
|
|
|
|
return
|
|
|
|
;;
|
2016-02-07 13:05:43 -05:00
|
|
|
syslog-tls-skip-verify)
|
|
|
|
COMPREPLY=( $( compgen -W "true" -- "${cur##*=}" ) )
|
2016-01-24 11:41:22 -05:00
|
|
|
return
|
|
|
|
;;
|
2016-02-07 13:05:43 -05:00
|
|
|
splunk-url)
|
|
|
|
COMPREPLY=( $( compgen -W "http:// https://" -- "${cur##*=}" ) )
|
2016-01-24 13:28:36 -05:00
|
|
|
__docker_nospace
|
2015-08-27 19:03:46 -04:00
|
|
|
__ltrim_colon_completions "${cur}"
|
|
|
|
return
|
|
|
|
;;
|
2016-02-07 13:05:43 -05:00
|
|
|
splunk-insecureskipverify)
|
|
|
|
COMPREPLY=( $( compgen -W "false true" -- "${cur##*=}" ) )
|
2015-08-27 19:03:46 -04:00
|
|
|
return
|
|
|
|
;;
|
2015-07-20 14:46:18 -04:00
|
|
|
esac
|
|
|
|
return 1
|
|
|
|
}
|
|
|
|
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_log_levels() {
|
2015-07-31 14:02:03 -04:00
|
|
|
COMPREPLY=( $( compgen -W "debug info warn error fatal" -- "$cur" ) )
|
|
|
|
}
|
|
|
|
|
2016-02-21 13:21:28 -05:00
|
|
|
__docker_complete_restart() {
|
|
|
|
case "$prev" in
|
|
|
|
--restart)
|
|
|
|
case "$cur" in
|
|
|
|
on-failure:*)
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
COMPREPLY=( $( compgen -W "always no on-failure on-failure: unless-stopped" -- "$cur") )
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
return 1
|
|
|
|
}
|
|
|
|
|
2015-02-02 15:16:18 -05:00
|
|
|
# a selection of the available signals that is most likely of interest in the
|
|
|
|
# context of docker containers.
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_signals() {
|
2015-02-02 15:16:18 -05:00
|
|
|
local signals=(
|
|
|
|
SIGCONT
|
|
|
|
SIGHUP
|
|
|
|
SIGINT
|
|
|
|
SIGKILL
|
|
|
|
SIGQUIT
|
|
|
|
SIGSTOP
|
|
|
|
SIGTERM
|
|
|
|
SIGUSR1
|
|
|
|
SIGUSR2
|
|
|
|
)
|
|
|
|
COMPREPLY=( $( compgen -W "${signals[*]} ${signals[*]#SIG}" -- "$( echo $cur | tr '[:lower:]' '[:upper:]')" ) )
|
|
|
|
}
|
|
|
|
|
2016-01-28 12:48:47 -05:00
|
|
|
__docker_complete_user_group() {
|
|
|
|
if [[ $cur == *:* ]] ; then
|
|
|
|
COMPREPLY=( $(compgen -g -- "${cur#*:}") )
|
|
|
|
else
|
|
|
|
COMPREPLY=( $(compgen -u -S : -- "$cur") )
|
|
|
|
__docker_nospace
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2015-06-14 15:03:41 -04:00
|
|
|
# global options that may appear after the docker command
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_docker() {
|
2015-01-19 12:35:40 -05:00
|
|
|
local boolean_options="
|
2015-07-31 14:02:03 -04:00
|
|
|
$global_boolean_options
|
2015-08-10 10:07:50 -04:00
|
|
|
--help
|
2015-01-19 12:35:40 -05:00
|
|
|
--version -v
|
|
|
|
"
|
|
|
|
|
2013-10-15 05:02:31 -04:00
|
|
|
case "$prev" in
|
2015-08-03 12:53:51 -04:00
|
|
|
--config)
|
|
|
|
_filedir -d
|
|
|
|
return
|
|
|
|
;;
|
2015-01-19 12:35:40 -05:00
|
|
|
--log-level|-l)
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_log_levels
|
2015-01-19 12:35:40 -05:00
|
|
|
return
|
|
|
|
;;
|
2015-06-14 15:03:41 -04:00
|
|
|
$(__docker_to_extglob "$global_options_with_args") )
|
2013-10-15 05:02:31 -04:00
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2015-06-14 15:03:41 -04:00
|
|
|
COMPREPLY=( $( compgen -W "$boolean_options $global_options_with_args" -- "$cur" ) )
|
2013-10-15 05:02:31 -04:00
|
|
|
;;
|
|
|
|
*)
|
2016-05-02 10:53:43 -04:00
|
|
|
local counter=$( __docker_pos_first_nonflag "$(__docker_to_extglob "$global_options_with_args")" )
|
2015-07-23 07:52:06 -04:00
|
|
|
if [ $cword -eq $counter ]; then
|
|
|
|
COMPREPLY=( $( compgen -W "${commands[*]} help" -- "$cur" ) )
|
|
|
|
fi
|
2013-10-15 05:02:31 -04:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_attach() {
|
2016-01-14 15:47:48 -05:00
|
|
|
__docker_complete_detach-keys && return
|
|
|
|
|
|
|
|
case "$cur" in
|
2014-01-11 03:00:03 -05:00
|
|
|
-*)
|
2016-03-29 12:57:10 -04:00
|
|
|
COMPREPLY=( $( compgen -W "--detach-keys --help --no-stdin --sig-proxy=false" -- "$cur" ) )
|
2014-01-11 03:00:03 -05:00
|
|
|
;;
|
|
|
|
*)
|
2016-01-14 15:47:48 -05:00
|
|
|
local counter=$(__docker_pos_first_nonflag '--detach-keys')
|
2014-01-11 03:00:03 -05:00
|
|
|
if [ $cword -eq $counter ]; then
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_containers_running
|
2014-01-11 03:00:03 -05:00
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
2013-10-15 05:02:31 -04:00
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_build() {
|
2015-10-16 05:25:46 -04:00
|
|
|
local options_with_args="
|
|
|
|
--build-arg
|
|
|
|
--cgroup-parent
|
|
|
|
--cpuset-cpus
|
|
|
|
--cpuset-mems
|
2016-06-21 05:30:26 -04:00
|
|
|
--cpu-shares -c
|
2015-10-16 05:25:46 -04:00
|
|
|
--cpu-period
|
|
|
|
--cpu-quota
|
|
|
|
--file -f
|
2016-01-05 12:53:16 -05:00
|
|
|
--isolation
|
2016-03-25 13:56:04 -04:00
|
|
|
--label
|
2015-10-16 05:25:46 -04:00
|
|
|
--memory -m
|
|
|
|
--memory-swap
|
2016-01-09 12:27:40 -05:00
|
|
|
--shm-size
|
2015-10-16 05:25:46 -04:00
|
|
|
--tag -t
|
|
|
|
--ulimit
|
|
|
|
"
|
|
|
|
|
|
|
|
local boolean_options="
|
|
|
|
--disable-content-trust=false
|
|
|
|
--force-rm
|
|
|
|
--help
|
|
|
|
--no-cache
|
|
|
|
--pull
|
|
|
|
--quiet -q
|
|
|
|
--rm
|
|
|
|
"
|
|
|
|
|
|
|
|
local all_options="$options_with_args $boolean_options"
|
|
|
|
|
2013-10-15 05:02:31 -04:00
|
|
|
case "$prev" in
|
2015-10-16 05:25:46 -04:00
|
|
|
--build-arg)
|
|
|
|
COMPREPLY=( $( compgen -e -- "$cur" ) )
|
|
|
|
__docker_nospace
|
2013-10-15 05:02:31 -04:00
|
|
|
return
|
|
|
|
;;
|
2015-03-06 02:13:27 -05:00
|
|
|
--file|-f)
|
|
|
|
_filedir
|
2015-03-25 13:38:17 -04:00
|
|
|
return
|
|
|
|
;;
|
2016-01-05 12:53:16 -05:00
|
|
|
--isolation)
|
|
|
|
__docker_complete_isolation
|
|
|
|
return
|
|
|
|
;;
|
2015-05-28 11:06:47 -04:00
|
|
|
--tag|-t)
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_image_repos_and_tags
|
2015-05-28 11:06:47 -04:00
|
|
|
return
|
|
|
|
;;
|
2015-10-16 05:25:46 -04:00
|
|
|
$(__docker_to_extglob "$options_with_args") )
|
|
|
|
return
|
|
|
|
;;
|
2013-10-15 05:02:31 -04:00
|
|
|
esac
|
|
|
|
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2015-10-16 05:25:46 -04:00
|
|
|
COMPREPLY=( $( compgen -W "$all_options" -- "$cur" ) )
|
2013-10-15 05:02:31 -04:00
|
|
|
;;
|
|
|
|
*)
|
2015-10-16 05:25:46 -04:00
|
|
|
local counter=$( __docker_pos_first_nonflag $( __docker_to_alternatives "$options_with_args" ) )
|
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
|
2015-03-17 12:06:23 -04:00
|
|
|
--author|-a|--change|-c|--message|-m)
|
2013-10-15 05:02:31 -04:00
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2016-03-29 12:57:10 -04:00
|
|
|
COMPREPLY=( $( compgen -W "--author -a --change -c --help --message -m --pause=false -p=false" -- "$cur" ) )
|
2013-10-15 05:02:31 -04:00
|
|
|
;;
|
|
|
|
*)
|
2015-03-17 12:06:23 -04:00
|
|
|
local counter=$(__docker_pos_first_nonflag '--author|-a|--change|-c|--message|-m')
|
2013-10-15 05:02:31 -04:00
|
|
|
|
2014-01-11 03:00:03 -05:00
|
|
|
if [ $cword -eq $counter ]; then
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_containers_all
|
2014-01-11 03:00:03 -05:00
|
|
|
return
|
|
|
|
fi
|
|
|
|
(( counter++ ))
|
|
|
|
|
|
|
|
if [ $cword -eq $counter ]; then
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_image_repos_and_tags
|
2014-01-11 03:00:03 -05:00
|
|
|
return
|
2013-10-15 05:02:31 -04:00
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_cp() {
|
2015-03-17 12:06:23 -04:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2016-01-24 08:39:52 -05:00
|
|
|
COMPREPLY=( $( compgen -W "--follow-link -L --help" -- "$cur" ) )
|
2015-03-17 12:06:23 -04:00
|
|
|
;;
|
|
|
|
*)
|
|
|
|
local counter=$(__docker_pos_first_nonflag)
|
|
|
|
if [ $cword -eq $counter ]; then
|
|
|
|
case "$cur" in
|
|
|
|
*:)
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
*)
|
2015-10-18 11:16:15 -04:00
|
|
|
# combined container and filename completion
|
|
|
|
_filedir
|
|
|
|
local files=( ${COMPREPLY[@]} )
|
|
|
|
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_containers_all
|
2015-03-17 12:06:23 -04:00
|
|
|
COMPREPLY=( $( compgen -W "${COMPREPLY[*]}" -S ':' ) )
|
2015-10-18 11:16:15 -04:00
|
|
|
local containers=( ${COMPREPLY[@]} )
|
|
|
|
|
|
|
|
COMPREPLY=( $( compgen -W "${files[*]} ${containers[*]}" -- "$cur" ) )
|
|
|
|
if [[ "$COMPREPLY" == *: ]]; then
|
|
|
|
__docker_nospace
|
|
|
|
fi
|
2015-03-17 12:06:23 -04:00
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
fi
|
|
|
|
(( counter++ ))
|
2014-01-11 03:00:03 -05:00
|
|
|
|
2015-03-17 12:06:23 -04:00
|
|
|
if [ $cword -eq $counter ]; then
|
2015-10-18 11:16:15 -04:00
|
|
|
if [ -e "$prev" ]; then
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_containers_all
|
2015-10-18 11:16:15 -04:00
|
|
|
COMPREPLY=( $( compgen -W "${COMPREPLY[*]}" -S ':' ) )
|
|
|
|
__docker_nospace
|
|
|
|
else
|
|
|
|
_filedir
|
|
|
|
fi
|
2015-03-17 12:06:23 -04:00
|
|
|
return
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
2013-10-15 05:02:31 -04:00
|
|
|
}
|
|
|
|
|
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
|
|
|
}
|
|
|
|
|
2015-06-14 15:03:41 -04:00
|
|
|
_docker_daemon() {
|
|
|
|
local boolean_options="
|
2015-07-31 14:02:03 -04:00
|
|
|
$global_boolean_options
|
2015-10-06 18:45:32 -04:00
|
|
|
--disable-legacy-registry
|
2015-08-10 10:07:50 -04:00
|
|
|
--help
|
2015-06-14 15:03:41 -04:00
|
|
|
--icc=false
|
|
|
|
--ip-forward=false
|
|
|
|
--ip-masq=false
|
|
|
|
--iptables=false
|
|
|
|
--ipv6
|
2016-06-14 03:14:25 -04:00
|
|
|
--live-restore
|
2015-12-13 05:10:41 -05:00
|
|
|
--raw-logs
|
2015-06-14 15:03:41 -04:00
|
|
|
--selinux-enabled
|
|
|
|
--userland-proxy=false
|
|
|
|
"
|
|
|
|
local options_with_args="
|
2015-07-31 14:02:03 -04:00
|
|
|
$global_options_with_args
|
2016-06-03 12:12:20 -04:00
|
|
|
--add-runtime
|
2015-06-14 15:03:41 -04:00
|
|
|
--api-cors-header
|
2016-01-12 19:38:18 -05:00
|
|
|
--authorization-plugin
|
2015-06-14 15:03:41 -04:00
|
|
|
--bip
|
|
|
|
--bridge -b
|
2016-01-05 12:29:37 -05:00
|
|
|
--cgroup-parent
|
2015-09-28 05:23:23 -04:00
|
|
|
--cluster-advertise
|
|
|
|
--cluster-store
|
2015-10-09 07:57:15 -04:00
|
|
|
--cluster-store-opt
|
2016-05-24 20:07:23 -04:00
|
|
|
--config-file
|
2016-03-28 07:29:53 -04:00
|
|
|
--containerd
|
2015-06-14 15:03:41 -04:00
|
|
|
--default-gateway
|
|
|
|
--default-gateway-v6
|
|
|
|
--default-ulimit
|
|
|
|
--dns
|
|
|
|
--dns-search
|
2015-08-31 14:47:25 -04:00
|
|
|
--dns-opt
|
2015-06-14 15:03:41 -04:00
|
|
|
--exec-opt
|
|
|
|
--exec-root
|
|
|
|
--fixed-cidr
|
|
|
|
--fixed-cidr-v6
|
|
|
|
--graph -g
|
|
|
|
--group -G
|
|
|
|
--insecure-registry
|
|
|
|
--ip
|
|
|
|
--label
|
|
|
|
--log-driver
|
|
|
|
--log-opt
|
2016-05-13 02:25:53 -04:00
|
|
|
--max-concurrent-downloads
|
|
|
|
--max-concurrent-uploads
|
2015-06-14 15:03:41 -04:00
|
|
|
--mtu
|
2016-07-13 15:31:55 -04:00
|
|
|
--oom-score-adjust
|
2015-06-14 15:03:41 -04:00
|
|
|
--pidfile -p
|
|
|
|
--registry-mirror
|
|
|
|
--storage-driver -s
|
|
|
|
--storage-opt
|
2016-01-26 13:09:25 -05:00
|
|
|
--userns-remap
|
2015-06-14 15:03:41 -04:00
|
|
|
"
|
|
|
|
|
2016-02-07 13:02:30 -05:00
|
|
|
__docker_complete_log_driver_options && return
|
|
|
|
|
2016-02-07 13:05:43 -05:00
|
|
|
key=$(__docker_map_key_of_current_option '--cluster-store-opt')
|
|
|
|
case "$key" in
|
|
|
|
kv.*file)
|
|
|
|
cur=${cur##*=}
|
|
|
|
_filedir
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
2016-02-29 20:51:36 -05:00
|
|
|
|
2016-02-07 13:05:43 -05:00
|
|
|
local key=$(__docker_map_key_of_current_option '--storage-opt')
|
|
|
|
case "$key" in
|
2016-06-13 05:12:31 -04:00
|
|
|
dm.blkdiscard|dm.override_udev_sync_check|dm.use_deferred_removal|dm.use_deferred_deletion)
|
2016-02-07 13:05:43 -05:00
|
|
|
COMPREPLY=( $( compgen -W "false true" -- "${cur##*=}" ) )
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
dm.fs)
|
|
|
|
COMPREPLY=( $( compgen -W "ext4 xfs" -- "${cur##*=}" ) )
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
dm.thinpooldev)
|
|
|
|
cur=${cur##*=}
|
|
|
|
_filedir
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
2016-02-07 13:02:30 -05:00
|
|
|
|
2015-06-14 15:03:41 -04:00
|
|
|
case "$prev" in
|
2016-01-12 19:38:18 -05:00
|
|
|
--authorization-plugin)
|
2016-01-02 17:53:10 -05:00
|
|
|
__docker_complete_plugins Authorization
|
|
|
|
return
|
|
|
|
;;
|
2015-09-28 05:23:23 -04:00
|
|
|
--cluster-store)
|
|
|
|
COMPREPLY=( $( compgen -W "consul etcd zk" -S "://" -- "$cur" ) )
|
|
|
|
__docker_nospace
|
|
|
|
return
|
|
|
|
;;
|
2015-10-09 07:57:15 -04:00
|
|
|
--cluster-store-opt)
|
2016-01-24 10:11:27 -05:00
|
|
|
COMPREPLY=( $( compgen -W "discovery.heartbeat discovery.ttl kv.cacertfile kv.certfile kv.keyfile kv.path" -S = -- "$cur" ) )
|
2015-10-09 07:57:15 -04:00
|
|
|
__docker_nospace
|
|
|
|
return
|
|
|
|
;;
|
2015-06-14 15:03:41 -04:00
|
|
|
--exec-root|--graph|-g)
|
|
|
|
_filedir -d
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
--log-driver)
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_log_drivers
|
2015-06-14 15:03:41 -04:00
|
|
|
return
|
|
|
|
;;
|
2016-05-24 20:07:23 -04:00
|
|
|
--config-file|--containerd|--pidfile|-p|--tlscacert|--tlscert|--tlskey)
|
2015-06-14 15:03:41 -04:00
|
|
|
_filedir
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
--storage-driver|-s)
|
2016-06-21 04:19:07 -04:00
|
|
|
COMPREPLY=( $( compgen -W "aufs btrfs devicemapper overlay overlay2 vfs zfs" -- "$(echo $cur | tr '[:upper:]' '[:lower:]')" ) )
|
2015-06-14 15:03:41 -04:00
|
|
|
return
|
|
|
|
;;
|
2015-08-12 08:51:07 -04:00
|
|
|
--storage-opt)
|
2016-06-21 05:06:08 -04:00
|
|
|
local btrfs_options="btrfs.min_space"
|
2015-08-12 08:51:07 -04:00
|
|
|
local devicemapper_options="
|
|
|
|
dm.basesize
|
|
|
|
dm.blkdiscard
|
|
|
|
dm.blocksize
|
|
|
|
dm.fs
|
|
|
|
dm.loopdatasize
|
|
|
|
dm.loopmetadatasize
|
2016-03-28 08:15:56 -04:00
|
|
|
dm.min_free_space
|
2015-08-12 08:51:07 -04:00
|
|
|
dm.mkfsarg
|
|
|
|
dm.mountopt
|
|
|
|
dm.override_udev_sync_check
|
|
|
|
dm.thinpooldev
|
2015-10-18 07:39:52 -04:00
|
|
|
dm.use_deferred_deletion
|
|
|
|
dm.use_deferred_removal
|
2015-08-12 08:51:07 -04:00
|
|
|
"
|
|
|
|
local zfs_options="zfs.fsname"
|
|
|
|
|
|
|
|
case $(__docker_value_of_option '--storage-driver|-s') in
|
|
|
|
'')
|
2016-06-21 05:06:08 -04:00
|
|
|
COMPREPLY=( $( compgen -W "$btrfs_options $devicemapper_options $zfs_options" -S = -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
btrfs)
|
|
|
|
COMPREPLY=( $( compgen -W "$btrfs_options" -S = -- "$cur" ) )
|
2015-08-12 08:51:07 -04:00
|
|
|
;;
|
|
|
|
devicemapper)
|
|
|
|
COMPREPLY=( $( compgen -W "$devicemapper_options" -S = -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
zfs)
|
|
|
|
COMPREPLY=( $( compgen -W "$zfs_options" -S = -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
2015-09-22 15:17:30 -04:00
|
|
|
__docker_nospace
|
2015-08-12 08:51:07 -04:00
|
|
|
return
|
|
|
|
;;
|
2015-07-31 14:02:03 -04:00
|
|
|
--log-level|-l)
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_log_levels
|
2015-07-31 14:02:03 -04:00
|
|
|
return
|
|
|
|
;;
|
2015-06-14 15:03:41 -04:00
|
|
|
--log-opt)
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_log_options
|
2015-06-14 15:03:41 -04:00
|
|
|
return
|
|
|
|
;;
|
2016-01-26 13:09:25 -05:00
|
|
|
--userns-remap)
|
2016-01-28 12:48:47 -05:00
|
|
|
__docker_complete_user_group
|
2016-01-26 13:09:25 -05:00
|
|
|
return
|
|
|
|
;;
|
2015-06-14 15:03:41 -04:00
|
|
|
$(__docker_to_extglob "$options_with_args") )
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
|
|
|
COMPREPLY=( $( compgen -W "$boolean_options $options_with_args" -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_diff() {
|
2015-03-17 12:06:23 -04:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
|
|
|
COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
local counter=$(__docker_pos_first_nonflag)
|
|
|
|
if [ $cword -eq $counter ]; then
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_containers_all
|
2015-03-17 12:06:23 -04:00
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
2013-10-15 05:02:31 -04:00
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_events() {
|
2016-02-07 13:05:43 -05:00
|
|
|
local key=$(__docker_map_key_of_current_option '-f|--filter')
|
|
|
|
case "$key" in
|
2016-01-18 12:37:12 -05:00
|
|
|
container)
|
|
|
|
cur="${cur##*=}"
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_containers_all
|
2015-02-19 07:43:09 -05:00
|
|
|
return
|
|
|
|
;;
|
2016-05-24 11:19:03 -04:00
|
|
|
daemon)
|
|
|
|
local name=$(__docker_q info | sed -n 's/^\(ID\|Name\): //p')
|
|
|
|
COMPREPLY=( $( compgen -W "$name" -- "${cur##*=}" ) )
|
|
|
|
return
|
|
|
|
;;
|
2016-01-18 12:37:12 -05:00
|
|
|
event)
|
2015-07-07 02:58:35 -04:00
|
|
|
COMPREPLY=( $( compgen -W "
|
|
|
|
attach
|
|
|
|
commit
|
2016-01-18 11:55:23 -05:00
|
|
|
connect
|
2015-07-07 02:58:35 -04:00
|
|
|
copy
|
|
|
|
create
|
|
|
|
delete
|
|
|
|
destroy
|
2016-06-05 11:41:58 -04:00
|
|
|
detach
|
2015-07-07 02:58:35 -04:00
|
|
|
die
|
2016-01-18 11:55:23 -05:00
|
|
|
disconnect
|
2015-07-07 02:58:35 -04:00
|
|
|
exec_create
|
2016-06-05 11:41:58 -04:00
|
|
|
exec_detach
|
2015-07-07 02:58:35 -04:00
|
|
|
exec_start
|
|
|
|
export
|
|
|
|
import
|
|
|
|
kill
|
2016-06-21 04:24:14 -04:00
|
|
|
load
|
2016-01-18 11:55:23 -05:00
|
|
|
mount
|
2015-07-07 02:58:35 -04:00
|
|
|
oom
|
|
|
|
pause
|
|
|
|
pull
|
|
|
|
push
|
2016-05-24 11:19:03 -04:00
|
|
|
reload
|
2015-07-07 02:58:35 -04:00
|
|
|
rename
|
|
|
|
resize
|
|
|
|
restart
|
2016-06-21 04:24:14 -04:00
|
|
|
save
|
2015-07-07 02:58:35 -04:00
|
|
|
start
|
|
|
|
stop
|
|
|
|
tag
|
|
|
|
top
|
2016-01-18 11:55:23 -05:00
|
|
|
unmount
|
2015-07-07 02:58:35 -04:00
|
|
|
unpause
|
|
|
|
untag
|
2016-01-18 11:55:23 -05:00
|
|
|
update
|
2016-01-18 12:37:12 -05:00
|
|
|
" -- "${cur##*=}" ) )
|
2015-02-19 07:43:09 -05:00
|
|
|
return
|
|
|
|
;;
|
2016-01-18 12:37:12 -05:00
|
|
|
image)
|
|
|
|
cur="${cur##*=}"
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_images
|
2013-10-15 05:02:31 -04:00
|
|
|
return
|
|
|
|
;;
|
2016-01-18 12:37:12 -05:00
|
|
|
network)
|
|
|
|
cur="${cur##*=}"
|
2016-01-18 11:55:23 -05:00
|
|
|
__docker_complete_networks
|
|
|
|
return
|
|
|
|
;;
|
2016-01-18 12:37:12 -05:00
|
|
|
type)
|
2016-05-24 11:19:03 -04:00
|
|
|
COMPREPLY=( $( compgen -W "container daemon image network volume" -- "${cur##*=}" ) )
|
2016-01-18 11:55:23 -05:00
|
|
|
return
|
|
|
|
;;
|
2016-01-18 12:37:12 -05:00
|
|
|
volume)
|
|
|
|
cur="${cur##*=}"
|
2016-01-18 11:55:23 -05:00
|
|
|
__docker_complete_volumes
|
|
|
|
return
|
|
|
|
;;
|
2013-10-15 05:02:31 -04:00
|
|
|
esac
|
|
|
|
|
2016-01-18 12:37:12 -05:00
|
|
|
case "$prev" in
|
|
|
|
--filter|-f)
|
2016-05-24 11:19:03 -04:00
|
|
|
COMPREPLY=( $( compgen -S = -W "container daemon event image label network type volume" -- "$cur" ) )
|
2016-01-18 12:37:12 -05:00
|
|
|
__docker_nospace
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
--since|--until)
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2013-10-15 05:02:31 -04:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2015-03-17 12:06:23 -04:00
|
|
|
COMPREPLY=( $( compgen -W "--filter -f --help --since --until" -- "$cur" ) )
|
2013-10-15 05:02:31 -04:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_exec() {
|
2016-01-14 15:47:48 -05:00
|
|
|
__docker_complete_detach-keys && return
|
|
|
|
|
2015-05-28 11:06:47 -04:00
|
|
|
case "$prev" in
|
|
|
|
--user|-u)
|
2016-01-28 12:48:47 -05:00
|
|
|
__docker_complete_user_group
|
2015-05-28 11:06:47 -04:00
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2014-09-16 14:46:24 -04:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2016-01-14 15:47:48 -05:00
|
|
|
COMPREPLY=( $( compgen -W "--detach -d --detach-keys --help --interactive -i --privileged -t --tty -u --user" -- "$cur" ) )
|
2014-09-16 14:46:24 -04:00
|
|
|
;;
|
|
|
|
*)
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_containers_running
|
2014-09-16 14:46:24 -04:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_export() {
|
2015-03-17 12:06:23 -04:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
|
|
|
COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
local counter=$(__docker_pos_first_nonflag)
|
|
|
|
if [ $cword -eq $counter ]; then
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_containers_all
|
2015-03-17 12:06:23 -04:00
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
2013-10-15 05:02:31 -04:00
|
|
|
}
|
|
|
|
|
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
|
|
|
|
-*)
|
2016-03-30 00:56:24 -04:00
|
|
|
COMPREPLY=( $( compgen -W "--help --human=false -H=false --no-trunc --quiet -q" -- "$cur" ) )
|
2014-01-11 03:00:03 -05:00
|
|
|
;;
|
|
|
|
*)
|
|
|
|
local counter=$(__docker_pos_first_nonflag)
|
|
|
|
if [ $cword -eq $counter ]; then
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_images
|
2014-01-11 03:00:03 -05:00
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
2013-10-15 05:02:31 -04:00
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_images() {
|
2016-02-07 13:05:43 -05:00
|
|
|
local key=$(__docker_map_key_of_current_option '--filter|-f')
|
|
|
|
case "$key" in
|
2016-05-25 07:49:10 -04:00
|
|
|
before)
|
|
|
|
cur="${cur##*=}"
|
|
|
|
__docker_complete_images
|
|
|
|
return
|
|
|
|
;;
|
2016-02-07 13:05:43 -05:00
|
|
|
dangling)
|
|
|
|
COMPREPLY=( $( compgen -W "false true" -- "${cur##*=}" ) )
|
2015-03-17 12:06:23 -04:00
|
|
|
return
|
|
|
|
;;
|
2016-02-07 13:05:43 -05:00
|
|
|
label)
|
2015-12-18 08:03:41 -05:00
|
|
|
return
|
|
|
|
;;
|
2016-05-25 07:49:10 -04:00
|
|
|
since)
|
|
|
|
cur="${cur##*=}"
|
|
|
|
__docker_complete_images
|
|
|
|
return
|
|
|
|
;;
|
2015-03-17 12:06:23 -04:00
|
|
|
esac
|
|
|
|
|
2016-02-07 13:02:30 -05:00
|
|
|
case "$prev" in
|
|
|
|
--filter|-f)
|
2016-05-25 07:49:10 -04:00
|
|
|
COMPREPLY=( $( compgen -S = -W "before dangling label since" -- "$cur" ) )
|
2016-02-07 13:02:30 -05:00
|
|
|
__docker_nospace
|
2015-03-17 12:06:23 -04:00
|
|
|
return
|
|
|
|
;;
|
2016-02-07 13:02:30 -05:00
|
|
|
--format)
|
2015-03-29 12:24:08 -04:00
|
|
|
return
|
|
|
|
;;
|
2015-03-17 12:06:23 -04:00
|
|
|
esac
|
|
|
|
|
2013-10-15 05:02:31 -04:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2015-12-18 08:03:41 -05:00
|
|
|
COMPREPLY=( $( compgen -W "--all -a --digests --filter -f --format --help --no-trunc --quiet -q" -- "$cur" ) )
|
2013-10-15 05:02:31 -04:00
|
|
|
;;
|
2015-03-29 12:24:08 -04:00
|
|
|
=)
|
|
|
|
return
|
|
|
|
;;
|
2013-10-15 05:02:31 -04:00
|
|
|
*)
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_image_repos
|
2013-10-15 05:02:31 -04:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_import() {
|
2015-10-16 04:32:27 -04:00
|
|
|
case "$prev" in
|
|
|
|
--change|-c|--message|-m)
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2015-03-17 12:06:23 -04:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2015-10-16 04:32:27 -04:00
|
|
|
COMPREPLY=( $( compgen -W "--change -c --help --message -m" -- "$cur" ) )
|
2015-03-17 12:06:23 -04:00
|
|
|
;;
|
|
|
|
*)
|
2015-10-16 04:32:27 -04:00
|
|
|
local counter=$(__docker_pos_first_nonflag '--change|-c|--message|-m')
|
2015-03-17 12:06:23 -04:00
|
|
|
if [ $cword -eq $counter ]; then
|
|
|
|
return
|
|
|
|
fi
|
|
|
|
(( counter++ ))
|
2014-01-11 03:00:03 -05:00
|
|
|
|
2015-03-17 12:06:23 -04:00
|
|
|
if [ $cword -eq $counter ]; then
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_image_repos_and_tags
|
2015-03-17 12:06:23 -04:00
|
|
|
return
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
2013-10-15 05:02:31 -04:00
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_info() {
|
2016-06-21 05:15:17 -04:00
|
|
|
case "$prev" in
|
|
|
|
--format|-f)
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2015-03-17 12:06:23 -04:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2016-06-21 05:15:17 -04:00
|
|
|
COMPREPLY=( $( compgen -W "--format -f --help" -- "$cur" ) )
|
2015-03-17 12:06:23 -04:00
|
|
|
;;
|
|
|
|
esac
|
2013-10-15 05:02:31 -04:00
|
|
|
}
|
|
|
|
|
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
|
|
|
|
;;
|
2015-06-26 10:47:31 -04:00
|
|
|
--type)
|
|
|
|
COMPREPLY=( $( compgen -W "image container" -- "$cur" ) )
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
|
2014-01-11 03:00:03 -05:00
|
|
|
esac
|
|
|
|
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2015-10-14 11:34:56 -04:00
|
|
|
COMPREPLY=( $( compgen -W "--format -f --help --size -s --type" -- "$cur" ) )
|
2014-01-11 03:00:03 -05:00
|
|
|
;;
|
|
|
|
*)
|
2015-08-01 11:36:00 -04:00
|
|
|
case $(__docker_value_of_option --type) in
|
|
|
|
'')
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_containers_and_images
|
2015-08-01 11:36:00 -04:00
|
|
|
;;
|
|
|
|
container)
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_containers_all
|
2015-08-01 11:36:00 -04:00
|
|
|
;;
|
|
|
|
image)
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_images
|
2015-08-01 11:36:00 -04:00
|
|
|
;;
|
|
|
|
esac
|
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_kill() {
|
2015-02-02 15:16:18 -05:00
|
|
|
case "$prev" in
|
|
|
|
--signal|-s)
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_signals
|
2015-02-02 15:16:18 -05:00
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2015-03-17 12:06:23 -04:00
|
|
|
COMPREPLY=( $( compgen -W "--help --signal -s" -- "$cur" ) )
|
2015-02-02 15:16:18 -05:00
|
|
|
;;
|
|
|
|
*)
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_containers_running
|
2015-02-02 15:16:18 -05:00
|
|
|
;;
|
|
|
|
esac
|
2013-10-15 05:02:31 -04:00
|
|
|
}
|
|
|
|
|
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
|
|
|
|
-*)
|
2016-03-24 13:39:57 -04:00
|
|
|
COMPREPLY=( $( compgen -W "--help --input -i --quiet -q" -- "$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
|
2016-02-29 20:51:36 -05:00
|
|
|
--password|-p|--username|-u)
|
2013-10-15 05:02:31 -04:00
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2016-02-29 20:51:36 -05:00
|
|
|
COMPREPLY=( $( compgen -W "--help --password -p --username -u" -- "$cur" ) )
|
2015-03-17 12:06:23 -04:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
|
|
|
_docker_logout() {
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
|
|
|
COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
|
2013-10-15 05:02:31 -04:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_logs() {
|
2015-03-17 12:06:23 -04:00
|
|
|
case "$prev" in
|
2015-05-28 11:06:47 -04:00
|
|
|
--since|--tail)
|
2015-03-17 12:06:23 -04:00
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2014-01-11 03:00:03 -05:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2016-05-13 02:42:43 -04:00
|
|
|
COMPREPLY=( $( compgen -W "--details --follow -f --help --since --tail --timestamps -t" -- "$cur" ) )
|
2014-01-11 03:00:03 -05:00
|
|
|
;;
|
|
|
|
*)
|
2015-03-17 12:06:23 -04:00
|
|
|
local counter=$(__docker_pos_first_nonflag '--tail')
|
2014-01-11 03:00:03 -05:00
|
|
|
if [ $cword -eq $counter ]; then
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_containers_all
|
2014-01-11 03:00:03 -05:00
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
2013-10-15 05:02:31 -04:00
|
|
|
}
|
2014-10-02 17:13:37 -04:00
|
|
|
|
2015-10-11 11:08:44 -04:00
|
|
|
_docker_network_connect() {
|
2016-01-18 10:11:19 -05:00
|
|
|
local options_with_args="
|
|
|
|
--alias
|
|
|
|
--ip
|
|
|
|
--ip6
|
|
|
|
--link
|
2016-06-21 03:43:34 -04:00
|
|
|
--link-local-ip
|
2016-01-18 10:11:19 -05:00
|
|
|
"
|
|
|
|
|
|
|
|
local boolean_options="
|
|
|
|
--help
|
|
|
|
"
|
|
|
|
|
|
|
|
case "$prev" in
|
|
|
|
--link)
|
|
|
|
case "$cur" in
|
|
|
|
*:*)
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
__docker_complete_containers_running
|
|
|
|
COMPREPLY=( $( compgen -W "${COMPREPLY[*]}" -S ':' ) )
|
|
|
|
__docker_nospace
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
$(__docker_to_extglob "$options_with_args") )
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2015-10-11 11:08:44 -04:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2016-01-18 10:11:19 -05:00
|
|
|
COMPREPLY=( $( compgen -W "$boolean_options $options_with_args" -- "$cur" ) )
|
2015-10-11 11:08:44 -04:00
|
|
|
;;
|
|
|
|
*)
|
2016-01-18 10:11:19 -05:00
|
|
|
local counter=$( __docker_pos_first_nonflag $( __docker_to_alternatives "$options_with_args" ) )
|
2015-10-11 11:08:44 -04:00
|
|
|
if [ $cword -eq $counter ]; then
|
2015-12-15 10:07:13 -05:00
|
|
|
__docker_complete_networks
|
2015-10-11 11:08:44 -04:00
|
|
|
elif [ $cword -eq $(($counter + 1)) ]; then
|
2016-01-13 04:32:23 -05:00
|
|
|
__docker_complete_containers_all
|
2015-10-11 11:08:44 -04:00
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
|
|
|
_docker_network_create() {
|
|
|
|
case "$prev" in
|
2016-02-11 20:42:15 -05:00
|
|
|
--aux-address|--gateway|--internal|--ip-range|--ipam-opt|--ipv6|--opt|-o|--subnet)
|
2015-10-18 08:42:23 -04:00
|
|
|
return
|
|
|
|
;;
|
|
|
|
--ipam-driver)
|
|
|
|
COMPREPLY=( $( compgen -W "default" -- "$cur" ) )
|
|
|
|
return
|
|
|
|
;;
|
2015-10-11 11:08:44 -04:00
|
|
|
--driver|-d)
|
2016-07-20 16:13:14 -04:00
|
|
|
local plugins="$(__docker_plugins Network) macvlan"
|
2015-12-15 10:07:13 -05:00
|
|
|
# remove drivers that allow one instance only
|
|
|
|
plugins=${plugins/ host / }
|
|
|
|
plugins=${plugins/ null / }
|
|
|
|
COMPREPLY=( $(compgen -W "$plugins" -- "$cur") )
|
2015-10-11 11:08:44 -04:00
|
|
|
return
|
|
|
|
;;
|
2016-03-25 13:56:04 -04:00
|
|
|
--label)
|
|
|
|
return
|
|
|
|
;;
|
2015-10-11 11:08:44 -04:00
|
|
|
esac
|
|
|
|
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2016-03-25 13:56:04 -04:00
|
|
|
COMPREPLY=( $( compgen -W "--aux-address --driver -d --gateway --help --internal --ip-range --ipam-driver --ipam-opt --ipv6 --label --opt -o --subnet" -- "$cur" ) )
|
2015-10-11 11:08:44 -04:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
|
|
|
_docker_network_disconnect() {
|
2015-11-15 16:31:13 -05:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
|
|
|
COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
local counter=$(__docker_pos_first_nonflag)
|
|
|
|
if [ $cword -eq $counter ]; then
|
2015-12-15 10:07:13 -05:00
|
|
|
__docker_complete_networks
|
2015-11-15 16:31:13 -05:00
|
|
|
elif [ $cword -eq $(($counter + 1)) ]; then
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_containers_in_network "$prev"
|
2015-11-15 16:31:13 -05:00
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
2015-10-11 11:08:44 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
_docker_network_inspect() {
|
2015-12-02 16:32:10 -05:00
|
|
|
case "$prev" in
|
|
|
|
--format|-f)
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2015-10-11 11:08:44 -04:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2015-12-02 16:32:10 -05:00
|
|
|
COMPREPLY=( $( compgen -W "--format -f --help" -- "$cur" ) )
|
2015-10-11 11:08:44 -04:00
|
|
|
;;
|
|
|
|
*)
|
2015-12-15 10:07:13 -05:00
|
|
|
__docker_complete_networks
|
2015-10-11 11:08:44 -04:00
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
|
|
|
_docker_network_ls() {
|
2016-02-07 13:05:43 -05:00
|
|
|
local key=$(__docker_map_key_of_current_option '--filter|-f')
|
|
|
|
case "$key" in
|
2016-04-25 16:21:11 -04:00
|
|
|
driver)
|
|
|
|
local plugins=" $(__docker_plugins Network) "
|
|
|
|
COMPREPLY=( $(compgen -W "$plugins" -- "${cur##*=}") )
|
|
|
|
return
|
|
|
|
;;
|
2016-02-07 13:05:43 -05:00
|
|
|
id)
|
|
|
|
cur="${cur##*=}"
|
2015-12-27 12:28:19 -05:00
|
|
|
__docker_complete_network_ids
|
|
|
|
return
|
|
|
|
;;
|
2016-02-07 13:05:43 -05:00
|
|
|
name)
|
|
|
|
cur="${cur##*=}"
|
2015-12-27 12:28:19 -05:00
|
|
|
__docker_complete_network_names
|
|
|
|
return
|
|
|
|
;;
|
2016-02-07 13:05:43 -05:00
|
|
|
type)
|
|
|
|
COMPREPLY=( $( compgen -W "builtin custom" -- "${cur##*=}" ) )
|
2015-10-11 11:08:44 -04:00
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2016-02-07 13:02:30 -05:00
|
|
|
case "$prev" in
|
|
|
|
--filter|-f)
|
2016-04-25 16:21:11 -04:00
|
|
|
COMPREPLY=( $( compgen -S = -W "driver id label name type" -- "$cur" ) )
|
2016-02-07 13:02:30 -05:00
|
|
|
__docker_nospace
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2015-10-11 11:08:44 -04:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2015-12-27 12:28:19 -05:00
|
|
|
COMPREPLY=( $( compgen -W "--filter -f --help --no-trunc --quiet -q" -- "$cur" ) )
|
2015-10-11 11:08:44 -04:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
|
|
|
_docker_network_rm() {
|
2015-12-22 14:35:41 -05:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
|
|
|
COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
*)
|
2016-01-26 13:57:38 -05:00
|
|
|
__docker_complete_networks type=custom
|
2015-12-22 14:35:41 -05:00
|
|
|
esac
|
2015-10-11 11:08:44 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
_docker_network() {
|
|
|
|
local subcommands="
|
|
|
|
connect
|
|
|
|
create
|
|
|
|
disconnect
|
|
|
|
inspect
|
|
|
|
ls
|
|
|
|
rm
|
|
|
|
"
|
|
|
|
__docker_subcommands "$subcommands" && return
|
|
|
|
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
|
|
|
COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
COMPREPLY=( $( compgen -W "$subcommands" -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2016-06-12 13:05:22 -04:00
|
|
|
_docker_service() {
|
|
|
|
local subcommands="
|
|
|
|
create
|
|
|
|
inspect
|
2016-06-17 03:49:46 -04:00
|
|
|
ls list
|
|
|
|
rm remove
|
2016-06-15 15:28:33 -04:00
|
|
|
scale
|
2016-07-19 17:01:31 -04:00
|
|
|
ps
|
2016-06-12 13:05:22 -04:00
|
|
|
update
|
|
|
|
"
|
|
|
|
__docker_subcommands "$subcommands" && return
|
|
|
|
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
|
|
|
COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
COMPREPLY=( $( compgen -W "$subcommands" -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
|
|
|
_docker_service_create() {
|
2016-06-22 13:37:05 -04:00
|
|
|
_docker_service_update
|
2016-06-12 13:05:22 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
_docker_service_inspect() {
|
2016-06-17 03:49:46 -04:00
|
|
|
case "$prev" in
|
|
|
|
--format|-f)
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2016-06-12 13:05:22 -04:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2016-07-13 12:46:17 -04:00
|
|
|
COMPREPLY=( $( compgen -W "--format -f --help --pretty" -- "$cur" ) )
|
2016-06-12 13:05:22 -04:00
|
|
|
;;
|
|
|
|
*)
|
|
|
|
__docker_complete_services
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2016-06-18 12:52:02 -04:00
|
|
|
_docker_service_list() {
|
|
|
|
_docker_service_ls
|
|
|
|
}
|
|
|
|
|
|
|
|
_docker_service_ls() {
|
2016-06-29 07:05:29 -04:00
|
|
|
local key=$(__docker_map_key_of_current_option '--filter|-f')
|
|
|
|
case "$key" in
|
|
|
|
id)
|
|
|
|
__docker_complete_services --cur "${cur##*=}" --id
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
name)
|
|
|
|
__docker_complete_services --cur "${cur##*=}" --name
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2016-06-17 03:49:46 -04:00
|
|
|
case "$prev" in
|
2016-06-29 07:05:29 -04:00
|
|
|
--filter|-f)
|
|
|
|
COMPREPLY=( $( compgen -W "id label name" -S = -- "$cur" ) )
|
|
|
|
__docker_nospace
|
2016-06-17 03:49:46 -04:00
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2016-06-12 13:05:22 -04:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2016-06-29 07:05:29 -04:00
|
|
|
COMPREPLY=( $( compgen -W "--filter -f --help --quiet -q" -- "$cur" ) )
|
2016-06-12 13:05:22 -04:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2016-06-17 03:49:46 -04:00
|
|
|
_docker_service_remove() {
|
|
|
|
_docker_service_rm
|
|
|
|
}
|
|
|
|
|
2016-06-12 13:05:22 -04:00
|
|
|
_docker_service_rm() {
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
|
|
|
COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
__docker_complete_services
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2016-06-18 12:52:02 -04:00
|
|
|
_docker_service_scale() {
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
|
|
|
COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
*)
|
2016-06-29 07:05:29 -04:00
|
|
|
__docker_complete_services
|
|
|
|
__docker_append_to_completions "="
|
2016-06-18 12:52:02 -04:00
|
|
|
__docker_nospace
|
|
|
|
;;
|
|
|
|
esac
|
2016-06-17 03:49:46 -04:00
|
|
|
}
|
|
|
|
|
2016-07-19 17:01:31 -04:00
|
|
|
_docker_service_ps() {
|
2016-06-29 07:05:29 -04:00
|
|
|
local key=$(__docker_map_key_of_current_option '--filter|-f')
|
|
|
|
case "$key" in
|
|
|
|
desired-state)
|
|
|
|
COMPREPLY=( $( compgen -W "accepted running" -- "${cur##*=}" ) )
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
name)
|
|
|
|
__docker_complete_services --cur "${cur##*=}" --name
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2016-06-17 03:49:46 -04:00
|
|
|
case "$prev" in
|
2016-06-29 07:05:29 -04:00
|
|
|
--filter|-f)
|
|
|
|
COMPREPLY=( $( compgen -W "desired-state id name" -S = -- "$cur" ) )
|
|
|
|
__docker_nospace
|
2016-06-17 03:49:46 -04:00
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2016-06-12 13:05:22 -04:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2016-07-13 12:46:17 -04:00
|
|
|
COMPREPLY=( $( compgen -W "--all -a --filter -f --help --no-resolve" -- "$cur" ) )
|
2016-06-12 13:05:22 -04:00
|
|
|
;;
|
2016-06-18 12:52:02 -04:00
|
|
|
*)
|
2016-06-29 07:05:29 -04:00
|
|
|
local counter=$(__docker_pos_first_nonflag '--filter|-f')
|
|
|
|
if [ $cword -eq $counter ]; then
|
|
|
|
__docker_complete_services
|
|
|
|
fi
|
|
|
|
;;
|
2016-06-12 13:05:22 -04:00
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2016-06-18 12:52:02 -04:00
|
|
|
_docker_service_update() {
|
2016-06-22 13:37:05 -04:00
|
|
|
local $subcommand="${words[$subcommand_pos]}"
|
|
|
|
|
2016-06-18 12:52:02 -04:00
|
|
|
local options_with_args="
|
|
|
|
--constraint
|
|
|
|
--endpoint-mode
|
|
|
|
--env -e
|
|
|
|
--label -l
|
|
|
|
--limit-cpu
|
|
|
|
--limit-memory
|
2016-07-19 07:20:40 -04:00
|
|
|
--log-driver
|
|
|
|
--log-opt
|
2016-07-13 12:46:17 -04:00
|
|
|
--mount
|
2016-06-18 12:52:02 -04:00
|
|
|
--name
|
|
|
|
--network
|
|
|
|
--publish -p
|
|
|
|
--replicas
|
|
|
|
--reserve-cpu
|
|
|
|
--reserve-memory
|
|
|
|
--restart-condition
|
|
|
|
--restart-delay
|
|
|
|
--restart-max-attempts
|
|
|
|
--restart-window
|
|
|
|
--stop-grace-period
|
|
|
|
--update-delay
|
2016-07-22 14:35:51 -04:00
|
|
|
--update-failure-action
|
2016-06-18 12:52:02 -04:00
|
|
|
--update-parallelism
|
|
|
|
--user -u
|
|
|
|
--workdir -w
|
|
|
|
"
|
|
|
|
|
|
|
|
local boolean_options="
|
|
|
|
--help
|
2016-07-22 04:38:56 -04:00
|
|
|
--with-registry-auth
|
2016-06-18 12:52:02 -04:00
|
|
|
"
|
|
|
|
|
2016-07-19 07:20:40 -04:00
|
|
|
__docker_complete_log_driver_options && return
|
|
|
|
|
2016-07-13 05:37:31 -04:00
|
|
|
if [ "$subcommand" = "create" ] ; then
|
|
|
|
options_with_args="$options_with_args
|
2016-07-26 07:45:57 -04:00
|
|
|
--container-label
|
2016-07-13 05:37:31 -04:00
|
|
|
--mode
|
|
|
|
"
|
|
|
|
|
|
|
|
case "$prev" in
|
|
|
|
--mode)
|
|
|
|
COMPREPLY=( $( compgen -W "global replicated" -- "$cur" ) )
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
fi
|
2016-06-22 13:37:05 -04:00
|
|
|
if [ "$subcommand" = "update" ] ; then
|
|
|
|
options_with_args="$options_with_args
|
|
|
|
--arg
|
2016-07-26 07:45:57 -04:00
|
|
|
--container-label-add
|
|
|
|
--container-label-rm
|
2016-06-22 13:37:05 -04:00
|
|
|
--image
|
|
|
|
"
|
|
|
|
|
|
|
|
case "$prev" in
|
|
|
|
--image)
|
|
|
|
__docker_complete_image_repos_and_tags
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
fi
|
|
|
|
|
2016-06-18 12:52:02 -04:00
|
|
|
case "$prev" in
|
2016-06-22 13:37:05 -04:00
|
|
|
--endpoint-mode)
|
2016-07-13 05:37:31 -04:00
|
|
|
COMPREPLY=( $( compgen -W "dnsrr vip" -- "$cur" ) )
|
2016-06-22 13:37:05 -04:00
|
|
|
return
|
|
|
|
;;
|
|
|
|
--env|-e)
|
2016-08-05 11:41:40 -04:00
|
|
|
# we do not append a "=" here because "-e VARNAME" is legal systax, too
|
|
|
|
COMPREPLY=( $( compgen -e -- "$cur" ) )
|
2016-06-22 13:37:05 -04:00
|
|
|
__docker_nospace
|
|
|
|
return
|
|
|
|
;;
|
2016-07-19 07:20:40 -04:00
|
|
|
--log-driver)
|
|
|
|
__docker_complete_log_drivers
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
--log-opt)
|
|
|
|
__docker_complete_log_options
|
|
|
|
return
|
|
|
|
;;
|
2016-06-22 13:37:05 -04:00
|
|
|
--network)
|
|
|
|
__docker_complete_networks
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
--restart-condition)
|
2016-07-07 05:32:19 -04:00
|
|
|
COMPREPLY=( $( compgen -W "any none on-failure" -- "$cur" ) )
|
2016-06-22 13:37:05 -04:00
|
|
|
return
|
|
|
|
;;
|
|
|
|
--user|-u)
|
|
|
|
__docker_complete_user_group
|
|
|
|
return
|
|
|
|
;;
|
2016-06-18 12:52:02 -04:00
|
|
|
$(__docker_to_extglob "$options_with_args") )
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2016-06-15 15:28:33 -04:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2016-06-18 12:52:02 -04:00
|
|
|
COMPREPLY=( $( compgen -W "$boolean_options $options_with_args" -- "$cur" ) )
|
2016-06-15 15:28:33 -04:00
|
|
|
;;
|
|
|
|
*)
|
2016-06-22 13:37:05 -04:00
|
|
|
if [ "$subcommand" = "update" ] ; then
|
|
|
|
__docker_complete_services
|
|
|
|
fi
|
2016-06-15 15:28:33 -04:00
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2016-06-12 13:05:22 -04:00
|
|
|
_docker_swarm() {
|
|
|
|
local subcommands="
|
|
|
|
init
|
|
|
|
join
|
2016-07-22 11:39:55 -04:00
|
|
|
join-token
|
2016-06-12 13:05:22 -04:00
|
|
|
leave
|
2016-06-18 12:52:02 -04:00
|
|
|
update
|
2016-06-12 13:05:22 -04:00
|
|
|
"
|
|
|
|
__docker_subcommands "$subcommands" && return
|
|
|
|
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
|
|
|
COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
COMPREPLY=( $( compgen -W "$subcommands" -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
|
|
|
_docker_swarm_init() {
|
2016-06-18 13:11:46 -04:00
|
|
|
case "$prev" in
|
2016-08-05 12:56:17 -04:00
|
|
|
--advertise-addr)
|
2016-06-29 08:26:55 -04:00
|
|
|
if [[ $cur == *: ]] ; then
|
|
|
|
COMPREPLY=( $( compgen -W "2377" -- "${cur##*:}" ) )
|
2016-08-05 12:56:17 -04:00
|
|
|
else
|
|
|
|
__docker_complete_local_interfaces
|
|
|
|
__docker_nospace
|
2016-06-29 08:26:55 -04:00
|
|
|
fi
|
|
|
|
return
|
|
|
|
;;
|
2016-08-05 12:56:17 -04:00
|
|
|
--listen-addr)
|
2016-06-30 21:07:35 -04:00
|
|
|
if [[ $cur == *: ]] ; then
|
|
|
|
COMPREPLY=( $( compgen -W "2377" -- "${cur##*:}" ) )
|
2016-08-05 12:56:17 -04:00
|
|
|
else
|
|
|
|
__docker_complete_local_interfaces --add 0.0.0.0
|
|
|
|
__docker_nospace
|
2016-06-30 21:07:35 -04:00
|
|
|
fi
|
|
|
|
return
|
|
|
|
;;
|
2016-06-18 13:11:46 -04:00
|
|
|
esac
|
|
|
|
|
2016-06-12 13:05:22 -04:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2016-06-30 21:07:35 -04:00
|
|
|
COMPREPLY=( $( compgen -W "--advertise-addr --force-new-cluster --help --listen-addr" -- "$cur" ) )
|
2016-06-12 13:05:22 -04:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2016-06-18 12:52:02 -04:00
|
|
|
_docker_swarm_join() {
|
2016-06-18 13:11:46 -04:00
|
|
|
case "$prev" in
|
2016-08-05 12:56:17 -04:00
|
|
|
--advertise-addr)
|
2016-06-29 08:26:55 -04:00
|
|
|
if [[ $cur == *: ]] ; then
|
|
|
|
COMPREPLY=( $( compgen -W "2377" -- "${cur##*:}" ) )
|
2016-08-05 12:56:17 -04:00
|
|
|
else
|
|
|
|
__docker_complete_local_interfaces
|
|
|
|
__docker_nospace
|
2016-06-29 08:26:55 -04:00
|
|
|
fi
|
2016-06-18 13:11:46 -04:00
|
|
|
return
|
|
|
|
;;
|
2016-08-05 12:56:17 -04:00
|
|
|
--listen-addr)
|
2016-06-30 21:07:35 -04:00
|
|
|
if [[ $cur == *: ]] ; then
|
|
|
|
COMPREPLY=( $( compgen -W "2377" -- "${cur##*:}" ) )
|
2016-08-05 12:56:17 -04:00
|
|
|
else
|
|
|
|
__docker_complete_local_interfaces --add 0.0.0.0
|
|
|
|
__docker_nospace
|
2016-06-30 21:07:35 -04:00
|
|
|
fi
|
|
|
|
return
|
|
|
|
;;
|
2016-08-05 12:56:17 -04:00
|
|
|
--token)
|
|
|
|
return
|
|
|
|
;;
|
2016-06-18 13:11:46 -04:00
|
|
|
esac
|
|
|
|
|
2016-06-12 13:05:22 -04:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2016-08-05 13:14:13 -04:00
|
|
|
COMPREPLY=( $( compgen -W "--advertise-addr --help --listen-addr --token" -- "$cur" ) )
|
2016-06-12 13:05:22 -04:00
|
|
|
;;
|
2016-06-29 08:26:55 -04:00
|
|
|
*:)
|
|
|
|
COMPREPLY=( $( compgen -W "2377" -- "${cur##*:}" ) )
|
|
|
|
;;
|
2016-06-12 13:05:22 -04:00
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2016-07-22 11:39:55 -04:00
|
|
|
_docker_swarm_join-token() {
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
|
|
|
COMPREPLY=( $( compgen -W "--help --quiet -q --rotate" -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
local counter=$( __docker_pos_first_nonflag )
|
|
|
|
if [ $cword -eq $counter ]; then
|
|
|
|
COMPREPLY=( $( compgen -W "manager worker" -- "$cur" ) )
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2016-06-12 13:05:22 -04:00
|
|
|
_docker_swarm_leave() {
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
|
|
|
COMPREPLY=( $( compgen -W "--force --help" -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2016-06-18 12:52:02 -04:00
|
|
|
_docker_swarm_update() {
|
|
|
|
case "$prev" in
|
2016-07-22 07:09:09 -04:00
|
|
|
--cert-expiry|--dispatcher-heartbeat|--task-history-limit)
|
2016-06-18 12:52:02 -04:00
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2016-06-12 13:05:22 -04:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2016-07-22 07:09:09 -04:00
|
|
|
COMPREPLY=( $( compgen -W "--cert-expiry --dispatcher-heartbeat --help --task-history-limit" -- "$cur" ) )
|
2016-06-12 13:05:22 -04:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
|
|
|
_docker_node() {
|
|
|
|
local subcommands="
|
|
|
|
demote
|
|
|
|
inspect
|
2016-06-18 13:11:46 -04:00
|
|
|
ls list
|
2016-06-12 13:05:22 -04:00
|
|
|
promote
|
2016-06-18 13:11:46 -04:00
|
|
|
rm remove
|
2016-07-19 17:01:31 -04:00
|
|
|
ps
|
2016-06-12 13:05:22 -04:00
|
|
|
update
|
|
|
|
"
|
|
|
|
__docker_subcommands "$subcommands" && return
|
|
|
|
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
|
|
|
COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
COMPREPLY=( $( compgen -W "$subcommands" -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2016-06-18 12:52:02 -04:00
|
|
|
_docker_node_demote() {
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
|
|
|
COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
*)
|
2016-06-29 07:05:29 -04:00
|
|
|
__docker_complete_nodes --filter role=manager
|
2016-06-18 12:52:02 -04:00
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2016-06-12 13:05:22 -04:00
|
|
|
_docker_node_inspect() {
|
2016-06-18 13:11:46 -04:00
|
|
|
case "$prev" in
|
|
|
|
--format|-f)
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2016-06-12 13:05:22 -04:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2016-07-13 12:46:17 -04:00
|
|
|
COMPREPLY=( $( compgen -W "--format -f --help --pretty" -- "$cur" ) )
|
2016-06-12 13:05:22 -04:00
|
|
|
;;
|
|
|
|
*)
|
2016-08-05 12:06:25 -04:00
|
|
|
__docker_complete_nodes_plus_self
|
2016-06-12 13:05:22 -04:00
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2016-06-18 13:11:46 -04:00
|
|
|
_docker_node_list() {
|
|
|
|
_docker_node_ls
|
|
|
|
}
|
|
|
|
|
2016-06-12 13:05:22 -04:00
|
|
|
_docker_node_ls() {
|
2016-06-29 07:05:29 -04:00
|
|
|
local key=$(__docker_map_key_of_current_option '--filter|-f')
|
|
|
|
case "$key" in
|
|
|
|
id)
|
|
|
|
__docker_complete_nodes --cur "${cur##*=}" --id
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
name)
|
|
|
|
__docker_complete_nodes --cur "${cur##*=}" --name
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2016-06-18 13:11:46 -04:00
|
|
|
case "$prev" in
|
|
|
|
--filter|-f)
|
2016-06-29 07:05:29 -04:00
|
|
|
COMPREPLY=( $( compgen -W "id label name" -S = -- "$cur" ) )
|
|
|
|
__docker_nospace
|
2016-06-18 13:11:46 -04:00
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2016-06-12 13:05:22 -04:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2016-06-18 13:11:46 -04:00
|
|
|
COMPREPLY=( $( compgen -W "--filter -f --help --quiet -q" -- "$cur" ) )
|
2016-06-12 13:05:22 -04:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
|
|
|
_docker_node_promote() {
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
|
|
|
COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
*)
|
2016-06-29 07:05:29 -04:00
|
|
|
__docker_complete_nodes --filter role=worker
|
2016-06-12 13:05:22 -04:00
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2016-06-18 13:11:46 -04:00
|
|
|
_docker_node_remove() {
|
|
|
|
_docker_node_rm
|
|
|
|
}
|
|
|
|
|
2016-06-12 13:05:22 -04:00
|
|
|
_docker_node_rm() {
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2016-08-03 05:07:24 -04:00
|
|
|
COMPREPLY=( $( compgen -W "--force --help" -- "$cur" ) )
|
2016-06-12 13:05:22 -04:00
|
|
|
;;
|
|
|
|
*)
|
|
|
|
__docker_complete_nodes
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2016-07-19 17:01:31 -04:00
|
|
|
_docker_node_ps() {
|
2016-06-29 07:05:29 -04:00
|
|
|
local key=$(__docker_map_key_of_current_option '--filter|-f')
|
|
|
|
case "$key" in
|
|
|
|
desired-state)
|
|
|
|
COMPREPLY=( $( compgen -W "accepted running" -- "${cur##*=}" ) )
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
name)
|
|
|
|
__docker_complete_services --cur "${cur##*=}" --name
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2016-06-18 13:11:46 -04:00
|
|
|
case "$prev" in
|
|
|
|
--filter|-f)
|
2016-06-29 07:05:29 -04:00
|
|
|
COMPREPLY=( $( compgen -W "desired-state id label name" -S = -- "$cur" ) )
|
|
|
|
__docker_nospace
|
2016-06-18 13:11:46 -04:00
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2016-06-12 13:05:22 -04:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2016-07-13 12:46:17 -04:00
|
|
|
COMPREPLY=( $( compgen -W "--all -a --filter -f --help --no-resolve" -- "$cur" ) )
|
2016-06-12 13:05:22 -04:00
|
|
|
;;
|
|
|
|
*)
|
2016-06-29 07:05:29 -04:00
|
|
|
local counter=$(__docker_pos_first_nonflag '--filter|-f')
|
|
|
|
if [ $cword -eq $counter ]; then
|
|
|
|
__docker_complete_nodes_plus_self
|
|
|
|
fi
|
|
|
|
;;
|
2016-06-12 13:05:22 -04:00
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
|
|
|
_docker_node_update() {
|
2016-06-18 13:11:46 -04:00
|
|
|
case "$prev" in
|
2016-06-22 13:37:05 -04:00
|
|
|
--availability)
|
|
|
|
COMPREPLY=( $( compgen -W "active drain pause" -- "$cur" ) )
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
--role)
|
|
|
|
COMPREPLY=( $( compgen -W "manager worker" -- "$cur" ) )
|
2016-06-18 13:11:46 -04:00
|
|
|
return
|
|
|
|
;;
|
2016-07-19 07:09:28 -04:00
|
|
|
--label-add|--label-rm)
|
|
|
|
return
|
|
|
|
;;
|
2016-06-18 13:11:46 -04:00
|
|
|
esac
|
|
|
|
|
2016-06-12 13:05:22 -04:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2016-07-22 07:09:09 -04:00
|
|
|
COMPREPLY=( $( compgen -W "--availability --help --label-add --label-rm --role" -- "$cur" ) )
|
2016-06-12 13:05:22 -04:00
|
|
|
;;
|
|
|
|
*)
|
|
|
|
__docker_complete_nodes
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_pause() {
|
2015-03-17 12:06:23 -04:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
|
|
|
COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
local counter=$(__docker_pos_first_nonflag)
|
|
|
|
if [ $cword -eq $counter ]; then
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_containers_pauseable
|
2015-03-17 12:06:23 -04:00
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
2014-10-02 13:01:10 -04:00
|
|
|
}
|
2013-10-15 05:02:31 -04:00
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_port() {
|
2015-03-17 12:06:23 -04:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
|
|
|
COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
local counter=$(__docker_pos_first_nonflag)
|
|
|
|
if [ $cword -eq $counter ]; then
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_containers_all
|
2015-03-17 12:06:23 -04:00
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
2013-10-15 05:02:31 -04:00
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_ps() {
|
2016-02-07 13:05:43 -05:00
|
|
|
local key=$(__docker_map_key_of_current_option '--filter|-f')
|
|
|
|
case "$key" in
|
|
|
|
ancestor)
|
|
|
|
cur="${cur##*=}"
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_images
|
2015-09-01 02:47:02 -04:00
|
|
|
return
|
|
|
|
;;
|
2016-05-25 03:35:33 -04:00
|
|
|
before)
|
|
|
|
cur="${cur##*=}"
|
|
|
|
__docker_complete_containers_all
|
|
|
|
return
|
|
|
|
;;
|
2016-02-07 13:05:43 -05:00
|
|
|
id)
|
|
|
|
cur="${cur##*=}"
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_container_ids
|
2015-03-29 12:24:08 -04:00
|
|
|
return
|
|
|
|
;;
|
2016-02-07 13:05:43 -05:00
|
|
|
name)
|
|
|
|
cur="${cur##*=}"
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_container_names
|
2015-03-29 12:24:08 -04:00
|
|
|
return
|
|
|
|
;;
|
2016-06-07 15:44:17 -04:00
|
|
|
network)
|
|
|
|
cur="${cur##*=}"
|
|
|
|
__docker_complete_networks
|
|
|
|
return
|
|
|
|
;;
|
2016-05-25 03:35:33 -04:00
|
|
|
since)
|
|
|
|
cur="${cur##*=}"
|
|
|
|
__docker_complete_containers_all
|
|
|
|
return
|
|
|
|
;;
|
2016-02-07 13:05:43 -05:00
|
|
|
status)
|
|
|
|
COMPREPLY=( $( compgen -W "created dead exited paused restarting running" -- "${cur##*=}" ) )
|
2015-03-17 12:06:23 -04:00
|
|
|
return
|
|
|
|
;;
|
2016-03-24 13:18:39 -04:00
|
|
|
volume)
|
|
|
|
cur="${cur##*=}"
|
|
|
|
__docker_complete_volumes
|
|
|
|
return
|
|
|
|
;;
|
2015-03-17 12:06:23 -04:00
|
|
|
esac
|
|
|
|
|
2016-02-07 13:02:30 -05:00
|
|
|
case "$prev" in
|
|
|
|
--filter|-f)
|
2016-06-07 15:44:17 -04:00
|
|
|
COMPREPLY=( $( compgen -S = -W "ancestor before exited id label name network since status volume" -- "$cur" ) )
|
2016-02-07 13:02:30 -05:00
|
|
|
__docker_nospace
|
|
|
|
return
|
|
|
|
;;
|
2016-07-03 13:36:34 -04:00
|
|
|
--format|--last|-n)
|
2016-02-07 13:02:30 -05:00
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2013-10-15 05:02:31 -04:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2016-07-03 13:36:34 -04:00
|
|
|
COMPREPLY=( $( compgen -W "--all -a --filter -f --format --help --last -n --latest -l --no-trunc --quiet -q --size -s" -- "$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 "$cur" in
|
|
|
|
-*)
|
2016-01-29 12:25:14 -05:00
|
|
|
COMPREPLY=( $( compgen -W "--all-tags -a --disable-content-trust=false --help" -- "$cur" ) )
|
2013-10-15 05:02:31 -04:00
|
|
|
;;
|
|
|
|
*)
|
2015-03-17 12:06:23 -04:00
|
|
|
local counter=$(__docker_pos_first_nonflag)
|
2014-01-11 03:00:03 -05:00
|
|
|
if [ $cword -eq $counter ]; then
|
2015-05-01 12:04:24 -04:00
|
|
|
for arg in "${COMP_WORDS[@]}"; do
|
|
|
|
case "$arg" in
|
|
|
|
--all-tags|-a)
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_image_repos
|
2015-05-01 12:04:24 -04:00
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
done
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_image_repos_and_tags
|
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_push() {
|
2015-03-17 12:06:23 -04:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2016-01-29 12:25:14 -05:00
|
|
|
COMPREPLY=( $( compgen -W "--disable-content-trust=false --help" -- "$cur" ) )
|
2015-03-17 12:06:23 -04:00
|
|
|
;;
|
|
|
|
*)
|
|
|
|
local counter=$(__docker_pos_first_nonflag)
|
|
|
|
if [ $cword -eq $counter ]; then
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_image_repos_and_tags
|
2015-03-17 12:06:23 -04:00
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
2013-10-15 05:02:31 -04:00
|
|
|
}
|
|
|
|
|
2015-02-18 14:49:05 -05:00
|
|
|
_docker_rename() {
|
2015-03-17 12:06:23 -04:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
|
|
|
COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
local counter=$(__docker_pos_first_nonflag)
|
|
|
|
if [ $cword -eq $counter ]; then
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_containers_all
|
2015-03-17 12:06:23 -04:00
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
2015-02-18 14:49:05 -05: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
|
|
|
|
-*)
|
2015-03-17 12:06:23 -04:00
|
|
|
COMPREPLY=( $( compgen -W "--help --time -t" -- "$cur" ) )
|
2013-10-15 05:02:31 -04:00
|
|
|
;;
|
|
|
|
*)
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_containers_all
|
2013-10-15 05:02:31 -04:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_rm() {
|
2013-10-15 05:02:31 -04:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2015-03-17 12:06:23 -04:00
|
|
|
COMPREPLY=( $( compgen -W "--force -f --help --link -l --volumes -v" -- "$cur" ) )
|
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)
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_containers_all
|
2014-06-26 00:12:25 -04:00
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
done
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_containers_stopped
|
2013-10-15 05:02:31 -04:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_rmi() {
|
2015-03-17 12:06:23 -04:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
|
|
|
COMPREPLY=( $( compgen -W "--force -f --help --no-prune" -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
*)
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_images
|
2015-03-17 12:06:23 -04:00
|
|
|
;;
|
|
|
|
esac
|
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
|
2015-08-11 12:17:32 -04:00
|
|
|
--blkio-weight
|
2015-06-11 20:34:20 -04:00
|
|
|
--blkio-weight-device
|
2014-12-15 15:07:41 -05:00
|
|
|
--cap-add
|
|
|
|
--cap-drop
|
2015-03-24 08:15:16 -04:00
|
|
|
--cgroup-parent
|
2014-12-15 15:07:41 -05:00
|
|
|
--cidfile
|
2015-04-08 04:58:59 -04:00
|
|
|
--cpu-period
|
2015-04-20 11:16:47 -04:00
|
|
|
--cpu-quota
|
2015-08-11 12:17:32 -04:00
|
|
|
--cpuset-cpus
|
|
|
|
--cpuset-mems
|
2016-06-21 05:30:26 -04:00
|
|
|
--cpu-shares -c
|
2014-12-15 15:07:41 -05:00
|
|
|
--device
|
2015-07-08 07:06:48 -04:00
|
|
|
--device-read-bps
|
2015-07-08 07:06:48 -04:00
|
|
|
--device-read-iops
|
2015-07-08 07:06:48 -04:00
|
|
|
--device-write-bps
|
2015-07-08 07:06:48 -04:00
|
|
|
--device-write-iops
|
2014-12-15 15:07:41 -05:00
|
|
|
--dns
|
2015-08-31 14:47:25 -04:00
|
|
|
--dns-opt
|
2014-12-15 15:07:41 -05:00
|
|
|
--dns-search
|
|
|
|
--entrypoint
|
2014-12-30 13:18:21 -05:00
|
|
|
--env -e
|
2014-12-15 15:07:41 -05:00
|
|
|
--env-file
|
|
|
|
--expose
|
2015-06-17 16:25:53 -04:00
|
|
|
--group-add
|
2014-12-30 13:18:21 -05:00
|
|
|
--hostname -h
|
2016-01-18 10:11:19 -05:00
|
|
|
--ip
|
|
|
|
--ip6
|
2014-12-29 13:21:45 -05:00
|
|
|
--ipc
|
2016-01-05 12:53:16 -05:00
|
|
|
--isolation
|
2015-08-19 11:56:55 -04:00
|
|
|
--kernel-memory
|
2015-03-24 08:15:16 -04:00
|
|
|
--label-file
|
2015-08-11 12:17:32 -04:00
|
|
|
--label -l
|
2014-12-15 15:07:41 -05:00
|
|
|
--link
|
2016-06-21 03:43:34 -04:00
|
|
|
--link-local-ip
|
2015-03-24 08:15:16 -04:00
|
|
|
--log-driver
|
2015-07-13 11:28:25 -04:00
|
|
|
--log-opt
|
2014-12-29 13:21:45 -05:00
|
|
|
--mac-address
|
2014-12-30 13:18:21 -05:00
|
|
|
--memory -m
|
2015-03-06 02:13:27 -05:00
|
|
|
--memory-swap
|
2015-08-11 12:17:32 -04:00
|
|
|
--memory-swappiness
|
2015-09-23 02:02:45 -04:00
|
|
|
--memory-reservation
|
2014-12-15 15:07:41 -05:00
|
|
|
--name
|
2016-07-13 06:42:27 -04:00
|
|
|
--network
|
|
|
|
--network-alias
|
2015-10-13 05:26:27 -04:00
|
|
|
--oom-score-adj
|
2015-03-06 02:13:27 -05:00
|
|
|
--pid
|
2015-12-15 14:15:43 -05:00
|
|
|
--pids-limit
|
2014-12-30 13:18:21 -05:00
|
|
|
--publish -p
|
2014-12-15 15:07:41 -05:00
|
|
|
--restart
|
2016-06-03 12:12:20 -04:00
|
|
|
--runtime
|
2014-12-15 15:07:41 -05:00
|
|
|
--security-opt
|
2016-01-09 12:27:40 -05:00
|
|
|
--shm-size
|
2015-08-04 16:51:48 -04:00
|
|
|
--stop-signal
|
2016-06-21 05:04:09 -04:00
|
|
|
--storage-opt
|
2015-12-01 13:39:34 -05:00
|
|
|
--tmpfs
|
2016-03-29 08:24:28 -04:00
|
|
|
--sysctl
|
2015-03-09 08:36:09 -04:00
|
|
|
--ulimit
|
2015-08-11 12:17:32 -04:00
|
|
|
--user -u
|
2016-03-28 09:11:52 -04:00
|
|
|
--userns
|
2015-05-28 11:06:47 -04:00
|
|
|
--uts
|
2015-11-15 12:35:40 -05:00
|
|
|
--volume-driver
|
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
|
|
|
"
|
|
|
|
|
2015-10-16 05:31:31 -04:00
|
|
|
local boolean_options="
|
2015-08-11 12:17:32 -04:00
|
|
|
--disable-content-trust=false
|
2015-03-06 02:13:27 -05:00
|
|
|
--help
|
2014-12-30 13:18:21 -05:00
|
|
|
--interactive -i
|
2015-08-11 12:17:32 -04:00
|
|
|
--oom-kill-disable
|
2014-12-15 15:07:41 -05:00
|
|
|
--privileged
|
2014-12-30 13:18:21 -05:00
|
|
|
--publish-all -P
|
2015-03-06 02:13:27 -05:00
|
|
|
--read-only
|
2014-12-30 13:18:21 -05:00
|
|
|
--tty -t
|
2014-12-15 15:07:41 -05:00
|
|
|
"
|
|
|
|
|
2016-01-14 15:47:48 -05:00
|
|
|
if [ "$command" = "run" ] ; then
|
|
|
|
options_with_args="$options_with_args
|
|
|
|
--detach-keys
|
2016-06-03 11:04:04 -04:00
|
|
|
--health-cmd
|
|
|
|
--health-interval
|
|
|
|
--health-retries
|
|
|
|
--health-timeout
|
2016-01-14 15:47:48 -05:00
|
|
|
"
|
|
|
|
boolean_options="$boolean_options
|
|
|
|
--detach -d
|
2016-06-03 11:04:04 -04:00
|
|
|
--no-healthcheck
|
2016-01-14 15:47:48 -05:00
|
|
|
--rm
|
|
|
|
--sig-proxy=false
|
|
|
|
"
|
|
|
|
__docker_complete_detach-keys && return
|
|
|
|
fi
|
|
|
|
|
2015-10-16 05:31:31 -04:00
|
|
|
local all_options="$options_with_args $boolean_options"
|
|
|
|
|
2014-12-15 15:07:41 -05:00
|
|
|
|
2016-02-07 13:02:30 -05:00
|
|
|
__docker_complete_log_driver_options && return
|
2016-02-21 13:21:28 -05:00
|
|
|
__docker_complete_restart && return
|
2016-02-07 13:02:30 -05:00
|
|
|
|
2016-03-28 11:07:28 -04:00
|
|
|
local key=$(__docker_map_key_of_current_option '--security-opt')
|
|
|
|
case "$key" in
|
|
|
|
label)
|
|
|
|
[[ $cur == *: ]] && return
|
|
|
|
COMPREPLY=( $( compgen -W "user: role: type: level: disable" -- "${cur##*=}") )
|
|
|
|
if [ "${COMPREPLY[*]}" != "disable" ] ; then
|
|
|
|
__docker_nospace
|
|
|
|
fi
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
seccomp)
|
|
|
|
local cur=${cur##*=}
|
|
|
|
_filedir
|
|
|
|
COMPREPLY+=( $( compgen -W "unconfined" -- "$cur" ) )
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2013-10-15 05:02:31 -04:00
|
|
|
case "$prev" in
|
2014-12-30 13:18:21 -05:00
|
|
|
--add-host)
|
|
|
|
case "$cur" in
|
|
|
|
*:)
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_resolved_hostname
|
2014-12-30 13:18:21 -05:00
|
|
|
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)
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_capabilities
|
2014-06-29 01:09:23 -04:00
|
|
|
return
|
2013-10-15 05:02:31 -04:00
|
|
|
;;
|
2015-03-28 14:32:33 -04:00
|
|
|
--cidfile|--env-file|--label-file)
|
2014-12-30 13:18:21 -05:00
|
|
|
_filedir
|
2014-06-29 01:09:23 -04:00
|
|
|
return
|
2013-10-15 05:02:31 -04:00
|
|
|
;;
|
2015-12-01 13:39:34 -05:00
|
|
|
--device|--tmpfs|--volume|-v)
|
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" ) )
|
2015-09-22 15:17:30 -04:00
|
|
|
__docker_nospace
|
2014-06-29 01:09:23 -04:00
|
|
|
;;
|
|
|
|
/*)
|
|
|
|
_filedir
|
2015-09-22 15:17:30 -04:00
|
|
|
__docker_nospace
|
2014-06-29 01:09:23 -04:00
|
|
|
;;
|
|
|
|
esac
|
2014-01-11 03:00:03 -05:00
|
|
|
return
|
|
|
|
;;
|
2014-12-30 13:18:21 -05:00
|
|
|
--env|-e)
|
2016-08-05 11:41:40 -04:00
|
|
|
# we do not append a "=" here because "-e VARNAME" is legal systax, too
|
2014-01-11 03:00:03 -05:00
|
|
|
COMPREPLY=( $( compgen -e -- "$cur" ) )
|
2015-09-22 15:17:30 -04:00
|
|
|
__docker_nospace
|
2014-06-29 01:09:23 -04:00
|
|
|
return
|
|
|
|
;;
|
2014-12-29 13:21:45 -05:00
|
|
|
--ipc)
|
|
|
|
case "$cur" in
|
|
|
|
*:*)
|
|
|
|
cur="${cur#*:}"
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_containers_running
|
2014-12-29 13:21:45 -05:00
|
|
|
;;
|
|
|
|
*)
|
|
|
|
COMPREPLY=( $( compgen -W 'host container:' -- "$cur" ) )
|
|
|
|
if [ "$COMPREPLY" = "container:" ]; then
|
2015-09-22 15:17:30 -04:00
|
|
|
__docker_nospace
|
2014-12-29 13:21:45 -05:00
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
return
|
|
|
|
;;
|
2016-01-05 12:53:16 -05:00
|
|
|
--isolation)
|
|
|
|
__docker_complete_isolation
|
|
|
|
return
|
|
|
|
;;
|
2014-06-29 01:09:23 -04:00
|
|
|
--link)
|
|
|
|
case "$cur" in
|
|
|
|
*:*)
|
|
|
|
;;
|
|
|
|
*)
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_containers_running
|
2014-06-29 01:09:23 -04:00
|
|
|
COMPREPLY=( $( compgen -W "${COMPREPLY[*]}" -S ':' ) )
|
2015-09-22 15:17:30 -04:00
|
|
|
__docker_nospace
|
2014-06-29 01:09:23 -04:00
|
|
|
;;
|
|
|
|
esac
|
2014-01-11 03:00:03 -05:00
|
|
|
return
|
|
|
|
;;
|
2015-03-24 08:15:16 -04:00
|
|
|
--log-driver)
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_log_drivers
|
2015-03-24 08:15:16 -04:00
|
|
|
return
|
|
|
|
;;
|
2015-07-13 11:28:25 -04:00
|
|
|
--log-opt)
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_log_options
|
2015-07-13 11:28:25 -04:00
|
|
|
return
|
|
|
|
;;
|
2016-07-13 06:42:27 -04:00
|
|
|
--network)
|
2014-11-17 11:13:58 -05:00
|
|
|
case "$cur" in
|
|
|
|
container:*)
|
|
|
|
local cur=${cur#*:}
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_containers_all
|
2014-11-17 11:13:58 -05:00
|
|
|
;;
|
|
|
|
*)
|
2015-12-15 10:07:13 -05:00
|
|
|
COMPREPLY=( $( compgen -W "$(__docker_plugins Network) $(__docker_networks) container:" -- "$cur") )
|
2014-11-17 11:13:58 -05:00
|
|
|
if [ "${COMPREPLY[*]}" = "container:" ] ; then
|
2015-09-22 15:17:30 -04:00
|
|
|
__docker_nospace
|
2014-11-17 11:13:58 -05:00
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
return
|
|
|
|
;;
|
2016-05-06 14:56:03 -04:00
|
|
|
--pid)
|
|
|
|
case "$cur" in
|
|
|
|
*:*)
|
|
|
|
cur="${cur#*:}"
|
|
|
|
__docker_complete_containers_running
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
COMPREPLY=( $( compgen -W 'host container:' -- "$cur" ) )
|
|
|
|
if [ "$COMPREPLY" = "container:" ]; then
|
|
|
|
__docker_nospace
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
return
|
|
|
|
;;
|
2016-06-03 12:12:20 -04:00
|
|
|
--runtime)
|
|
|
|
__docker_complete_runtimes
|
|
|
|
return
|
|
|
|
;;
|
2014-11-17 11:13:58 -05:00
|
|
|
--security-opt)
|
2016-03-29 03:59:04 -04:00
|
|
|
COMPREPLY=( $( compgen -W "apparmor= label= no-new-privileges seccomp=" -- "$cur") )
|
|
|
|
if [ "${COMPREPLY[*]}" != "no-new-privileges" ] ; then
|
|
|
|
__docker_nospace
|
|
|
|
fi
|
2014-11-17 11:13:58 -05:00
|
|
|
return
|
|
|
|
;;
|
2016-06-21 05:04:09 -04:00
|
|
|
--storage-opt)
|
|
|
|
COMPREPLY=( $( compgen -W "size" -S = -- "$cur") )
|
|
|
|
__docker_nospace
|
|
|
|
return
|
|
|
|
;;
|
2016-01-28 12:48:47 -05:00
|
|
|
--user|-u)
|
|
|
|
__docker_complete_user_group
|
|
|
|
return
|
|
|
|
;;
|
2016-03-28 09:11:52 -04:00
|
|
|
--userns)
|
|
|
|
COMPREPLY=( $( compgen -W "host" -- "$cur" ) )
|
|
|
|
return
|
|
|
|
;;
|
2015-11-15 12:35:40 -05:00
|
|
|
--volume-driver)
|
2015-12-15 10:07:13 -05:00
|
|
|
__docker_complete_plugins Volume
|
2015-11-15 12:35:40 -05:00
|
|
|
return
|
|
|
|
;;
|
2014-12-30 13:18:21 -05:00
|
|
|
--volumes-from)
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_containers_all
|
2014-12-30 13:18:21 -05:00
|
|
|
return
|
|
|
|
;;
|
2015-10-16 05:31:31 -04:00
|
|
|
$(__docker_to_extglob "$options_with_args") )
|
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
|
|
|
;;
|
|
|
|
*)
|
2015-01-19 12:35:40 -05:00
|
|
|
local counter=$( __docker_pos_first_nonflag $( __docker_to_alternatives "$options_with_args" ) )
|
2014-01-11 03:00:03 -05:00
|
|
|
if [ $cword -eq $counter ]; then
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_images
|
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
|
|
|
|
-*)
|
2015-03-17 12:06:23 -04:00
|
|
|
COMPREPLY=( $( compgen -W "--help --output -o" -- "$cur" ) )
|
2014-12-29 13:21:45 -05:00
|
|
|
;;
|
|
|
|
*)
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_images
|
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_search() {
|
2016-05-20 07:41:28 -04:00
|
|
|
local key=$(__docker_map_key_of_current_option '--filter|-f')
|
|
|
|
case "$key" in
|
|
|
|
is-automated)
|
|
|
|
COMPREPLY=( $( compgen -W "false true" -- "${cur##*=}" ) )
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
is-official)
|
|
|
|
COMPREPLY=( $( compgen -W "false true" -- "${cur##*=}" ) )
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2014-01-11 03:00:03 -05:00
|
|
|
case "$prev" in
|
2016-05-20 07:41:28 -04:00
|
|
|
--filter|-f)
|
|
|
|
COMPREPLY=( $( compgen -S = -W "is-automated is-official stars" -- "$cur" ) )
|
|
|
|
__docker_nospace
|
2014-01-11 03:00:03 -05:00
|
|
|
return
|
|
|
|
;;
|
2016-06-03 10:32:37 -04:00
|
|
|
--limit)
|
|
|
|
return
|
|
|
|
;;
|
2014-01-11 03:00:03 -05:00
|
|
|
esac
|
|
|
|
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2016-06-03 10:32:37 -04:00
|
|
|
COMPREPLY=( $( compgen -W "--filter --help --limit --no-trunc" -- "$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() {
|
2016-01-14 15:47:48 -05:00
|
|
|
__docker_complete_detach-keys && return
|
|
|
|
|
2014-01-11 03:00:03 -05:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2016-01-14 15:47:48 -05:00
|
|
|
COMPREPLY=( $( compgen -W "--attach -a --detach-keys --help --interactive -i" -- "$cur" ) )
|
2014-01-11 03:00:03 -05:00
|
|
|
;;
|
|
|
|
*)
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_containers_stopped
|
2014-01-11 03:00:03 -05:00
|
|
|
;;
|
|
|
|
esac
|
2013-10-15 05:02:31 -04:00
|
|
|
}
|
|
|
|
|
2015-01-26 14:01:40 -05:00
|
|
|
_docker_stats() {
|
2015-03-17 12:06:23 -04:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2015-11-09 10:27:13 -05:00
|
|
|
COMPREPLY=( $( compgen -W "--all -a --help --no-stream" -- "$cur" ) )
|
2015-03-17 12:06:23 -04:00
|
|
|
;;
|
|
|
|
*)
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_containers_running
|
2015-03-17 12:06:23 -04:00
|
|
|
;;
|
|
|
|
esac
|
2015-01-26 14:01:40 -05: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
|
|
|
|
-*)
|
2015-03-17 12:06:23 -04:00
|
|
|
COMPREPLY=( $( compgen -W "--help --time -t" -- "$cur" ) )
|
2013-10-15 05:02:31 -04:00
|
|
|
;;
|
|
|
|
*)
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_containers_running
|
2013-10-15 05:02:31 -04:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_tag() {
|
2014-01-11 03:00:03 -05:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2016-01-24 13:07:04 -05:00
|
|
|
COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
|
2014-01-11 03:00:03 -05:00
|
|
|
;;
|
|
|
|
*)
|
|
|
|
local counter=$(__docker_pos_first_nonflag)
|
|
|
|
|
|
|
|
if [ $cword -eq $counter ]; then
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_image_repos_and_tags
|
2014-01-11 03:00:03 -05:00
|
|
|
return
|
|
|
|
fi
|
|
|
|
(( counter++ ))
|
|
|
|
|
|
|
|
if [ $cword -eq $counter ]; then
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_image_repos_and_tags
|
2014-01-11 03:00:03 -05:00
|
|
|
return
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
2013-10-15 05:02:31 -04:00
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_unpause() {
|
2015-03-17 12:06:23 -04:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
|
|
|
COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
local counter=$(__docker_pos_first_nonflag)
|
|
|
|
if [ $cword -eq $counter ]; then
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_containers_unpauseable
|
2015-03-17 12:06:23 -04:00
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
2014-10-02 13:01:10 -04:00
|
|
|
}
|
|
|
|
|
2016-01-06 13:15:12 -05:00
|
|
|
_docker_update() {
|
|
|
|
local options_with_args="
|
|
|
|
--blkio-weight
|
|
|
|
--cpu-period
|
|
|
|
--cpu-quota
|
|
|
|
--cpuset-cpus
|
|
|
|
--cpuset-mems
|
2016-06-21 05:30:26 -04:00
|
|
|
--cpu-shares -c
|
2016-01-06 13:15:12 -05:00
|
|
|
--kernel-memory
|
|
|
|
--memory -m
|
|
|
|
--memory-reservation
|
|
|
|
--memory-swap
|
2016-02-21 13:21:28 -05:00
|
|
|
--restart
|
2016-01-06 13:15:12 -05:00
|
|
|
"
|
|
|
|
|
|
|
|
local boolean_options="
|
|
|
|
--help
|
|
|
|
"
|
|
|
|
|
|
|
|
local all_options="$options_with_args $boolean_options"
|
|
|
|
|
2016-02-21 13:21:28 -05:00
|
|
|
__docker_complete_restart && return
|
|
|
|
|
2016-01-06 13:15:12 -05:00
|
|
|
case "$prev" in
|
|
|
|
$(__docker_to_extglob "$options_with_args") )
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
|
|
|
COMPREPLY=( $( compgen -W "$all_options" -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
__docker_complete_containers_all
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_top() {
|
2015-03-17 12:06:23 -04:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
|
|
|
COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
local counter=$(__docker_pos_first_nonflag)
|
|
|
|
if [ $cword -eq $counter ]; then
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_containers_running
|
2015-03-17 12:06:23 -04:00
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
2013-10-15 05:02:31 -04:00
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_version() {
|
2015-03-17 12:06:23 -04:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
|
|
|
COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
esac
|
2013-10-15 05:02:31 -04:00
|
|
|
}
|
|
|
|
|
2015-09-07 16:18:29 -04:00
|
|
|
_docker_volume_create() {
|
|
|
|
case "$prev" in
|
|
|
|
--driver|-d)
|
2015-12-15 10:07:13 -05:00
|
|
|
__docker_complete_plugins Volume
|
2015-09-07 16:18:29 -04:00
|
|
|
return
|
|
|
|
;;
|
2016-03-25 13:56:04 -04:00
|
|
|
--label|--name|--opt|-o)
|
2015-09-07 16:18:29 -04:00
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
2016-03-25 13:56:04 -04:00
|
|
|
COMPREPLY=( $( compgen -W "--driver -d --help --label --name --opt -o" -- "$cur" ) )
|
2015-09-07 16:18:29 -04:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
|
|
|
_docker_volume_inspect() {
|
|
|
|
case "$prev" in
|
|
|
|
--format|-f)
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
|
|
|
COMPREPLY=( $( compgen -W "--format -f --help" -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
*)
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_volumes
|
2015-09-07 16:18:29 -04:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
|
|
|
_docker_volume_ls() {
|
2016-02-07 13:05:43 -05:00
|
|
|
local key=$(__docker_map_key_of_current_option '--filter|-f')
|
|
|
|
case "$key" in
|
|
|
|
dangling)
|
|
|
|
COMPREPLY=( $( compgen -W "true false" -- "${cur##*=}" ) )
|
2016-01-26 14:29:37 -05:00
|
|
|
return
|
|
|
|
;;
|
2016-04-08 07:43:45 -04:00
|
|
|
driver)
|
|
|
|
cur=${cur##*=}
|
|
|
|
__docker_complete_plugins Volume
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
name)
|
|
|
|
cur=${cur##*=}
|
|
|
|
__docker_complete_volumes
|
|
|
|
return
|
|
|
|
;;
|
2016-01-26 14:29:37 -05:00
|
|
|
esac
|
|
|
|
|
2016-02-07 13:02:30 -05:00
|
|
|
case "$prev" in
|
|
|
|
--filter|-f)
|
2016-04-08 07:43:45 -04:00
|
|
|
COMPREPLY=( $( compgen -S = -W "dangling driver name" -- "$cur" ) )
|
2016-02-07 13:02:30 -05:00
|
|
|
__docker_nospace
|
2015-09-07 16:18:29 -04:00
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
|
|
|
COMPREPLY=( $( compgen -W "--filter -f --help --quiet -q" -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
|
|
|
_docker_volume_rm() {
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
|
|
|
COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
*)
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_volumes
|
2015-09-07 16:18:29 -04:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
|
|
|
_docker_volume() {
|
2015-10-11 09:32:47 -04:00
|
|
|
local subcommands="
|
2015-09-07 16:18:29 -04:00
|
|
|
create
|
|
|
|
inspect
|
|
|
|
ls
|
|
|
|
rm
|
2015-10-11 09:32:47 -04:00
|
|
|
"
|
|
|
|
__docker_subcommands "$subcommands" && return
|
2015-09-07 16:18:29 -04:00
|
|
|
|
|
|
|
case "$cur" in
|
|
|
|
-*)
|
|
|
|
COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
*)
|
2015-10-11 09:32:47 -04:00
|
|
|
COMPREPLY=( $( compgen -W "$subcommands" -- "$cur" ) )
|
2015-09-07 16:18:29 -04:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker_wait() {
|
2015-03-17 12:06:23 -04:00
|
|
|
case "$cur" in
|
|
|
|
-*)
|
|
|
|
COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
|
|
|
|
;;
|
|
|
|
*)
|
2015-12-22 06:27:56 -05:00
|
|
|
__docker_complete_containers_all
|
2015-03-17 12:06:23 -04:00
|
|
|
;;
|
|
|
|
esac
|
2013-10-15 05:02:31 -04:00
|
|
|
}
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
_docker() {
|
2015-01-19 12:35:40 -05:00
|
|
|
local previous_extglob_setting=$(shopt -p extglob)
|
|
|
|
shopt -s extglob
|
|
|
|
|
2014-10-02 17:13:37 -04:00
|
|
|
local commands=(
|
|
|
|
attach
|
|
|
|
build
|
|
|
|
commit
|
|
|
|
cp
|
|
|
|
create
|
2015-06-14 15:03:41 -04:00
|
|
|
daemon
|
2014-10-02 17:13:37 -04:00
|
|
|
diff
|
|
|
|
events
|
|
|
|
exec
|
|
|
|
export
|
|
|
|
history
|
|
|
|
images
|
|
|
|
import
|
|
|
|
info
|
|
|
|
inspect
|
|
|
|
kill
|
|
|
|
load
|
|
|
|
login
|
2015-03-17 12:06:23 -04:00
|
|
|
logout
|
2014-10-02 17:13:37 -04:00
|
|
|
logs
|
2015-10-11 11:08:44 -04:00
|
|
|
network
|
2016-06-12 13:05:22 -04:00
|
|
|
node
|
2014-10-02 17:13:37 -04:00
|
|
|
pause
|
|
|
|
port
|
|
|
|
ps
|
|
|
|
pull
|
|
|
|
push
|
2015-02-18 14:49:05 -05:00
|
|
|
rename
|
2014-10-02 17:13:37 -04:00
|
|
|
restart
|
|
|
|
rm
|
|
|
|
rmi
|
|
|
|
run
|
|
|
|
save
|
|
|
|
search
|
2016-06-12 13:05:22 -04:00
|
|
|
service
|
2014-10-02 17:13:37 -04:00
|
|
|
start
|
2015-01-26 14:01:40 -05:00
|
|
|
stats
|
2014-10-02 17:13:37 -04:00
|
|
|
stop
|
2016-06-12 13:05:22 -04:00
|
|
|
swarm
|
2014-10-02 17:13:37 -04:00
|
|
|
tag
|
|
|
|
top
|
|
|
|
unpause
|
2016-01-06 13:15:12 -05:00
|
|
|
update
|
2014-10-02 17:13:37 -04:00
|
|
|
version
|
2015-09-07 16:18:29 -04:00
|
|
|
volume
|
2014-10-02 17:13:37 -04:00
|
|
|
wait
|
|
|
|
)
|
2013-10-15 05:02:31 -04:00
|
|
|
|
2015-07-31 14:02:03 -04:00
|
|
|
# These options are valid as global options for all client commands
|
|
|
|
# and valid as command options for `docker daemon`
|
|
|
|
local global_boolean_options="
|
|
|
|
--debug -D
|
|
|
|
--tls
|
|
|
|
--tlsverify
|
|
|
|
"
|
2015-06-14 15:03:41 -04:00
|
|
|
local global_options_with_args="
|
2015-08-03 12:53:51 -04:00
|
|
|
--config
|
2015-01-19 12:35:40 -05:00
|
|
|
--host -H
|
|
|
|
--log-level -l
|
|
|
|
--tlscacert
|
|
|
|
--tlscert
|
|
|
|
--tlskey
|
|
|
|
"
|
|
|
|
|
2015-08-03 12:53:51 -04:00
|
|
|
local host config
|
2015-01-19 12:35:40 -05:00
|
|
|
|
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
|
|
|
|
|
2015-10-11 09:32:47 -04:00
|
|
|
local command='docker' command_pos=0 subcommand_pos
|
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
|
2015-05-13 16:39:25 -04:00
|
|
|
# save host so that completion can use custom daemon
|
|
|
|
--host|-H)
|
|
|
|
(( counter++ ))
|
|
|
|
host="${words[$counter]}"
|
|
|
|
;;
|
2015-08-03 12:53:51 -04:00
|
|
|
# save config so that completion can use custom configuration directories
|
|
|
|
--config)
|
|
|
|
(( counter++ ))
|
|
|
|
config="${words[$counter]}"
|
|
|
|
;;
|
2015-06-14 15:03:41 -04:00
|
|
|
$(__docker_to_extglob "$global_options_with_args") )
|
2013-10-15 05:02:31 -04:00
|
|
|
(( counter++ ))
|
|
|
|
;;
|
|
|
|
-*)
|
|
|
|
;;
|
2015-05-28 11:06:47 -04:00
|
|
|
=)
|
|
|
|
(( counter++ ))
|
|
|
|
;;
|
2013-10-15 05:02:31 -04:00
|
|
|
*)
|
2014-01-11 03:00:03 -05:00
|
|
|
command="${words[$counter]}"
|
2015-07-13 12:06:22 -04:00
|
|
|
command_pos=$counter
|
2013-10-15 05:02:31 -04:00
|
|
|
break
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
(( counter++ ))
|
|
|
|
done
|
|
|
|
|
2016-05-29 10:09:05 -04:00
|
|
|
local binary="${words[0]}"
|
2016-06-06 04:01:15 -04:00
|
|
|
if [[ $binary == ?(*/)dockerd ]] ; then
|
2016-05-29 10:09:05 -04:00
|
|
|
# for the dockerd binary, we reuse completion of `docker daemon`.
|
|
|
|
# dockerd does not have subcommands and global options.
|
|
|
|
command=daemon
|
|
|
|
command_pos=0
|
|
|
|
fi
|
|
|
|
|
2013-10-15 05:02:31 -04:00
|
|
|
local completions_func=_docker_${command}
|
|
|
|
declare -F $completions_func >/dev/null && $completions_func
|
|
|
|
|
2015-01-19 12:35:40 -05:00
|
|
|
eval "$previous_extglob_setting"
|
2013-10-15 05:02:31 -04:00
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
2015-11-08 12:04:35 -05:00
|
|
|
eval "$__docker_previous_extglob_setting"
|
|
|
|
unset __docker_previous_extglob_setting
|
|
|
|
|
2016-05-29 10:09:05 -04:00
|
|
|
complete -F _docker docker dockerd
|