zsh: update zsh completion for docker command

zsh completion is updated with the content of
felixr/docker-zsh-completion.

 - felixr/docker-zsh-completion@a93e1cb7bd Fix completion of repositories with tags
 - felixr/docker-zsh-completion@590ea70596 Respect provided `--host` flag when invoking docker
 - felixr/docker-zsh-completion@6c557babaa Several cosmetic improvements
 - felixr/docker-zsh-completion@5b63cc591a Update completion for `inspect`
 - felixr/docker-zsh-completion@b7d8f2f7cc Order completions alphabetically
 - felixr/docker-zsh-completion@63f6a06224 Factor completion for `build`, `create` and `run`
 - felixr/docker-zsh-completion@ade49ee47f Enforce positional arguments being last
 - felixr/docker-zsh-completion@850b6b6d95 Update completion for build/commit/export/exec/history/import
 - felixr/docker-zsh-completion@01bfd8c075 Remove completion for `insert` and duplicate of `import`
 - felixr/docker-zsh-completion@c64a1d730a Update completion for `stats` to add `--no-stream` flag
 - felixr/docker-zsh-completion@5e81d78b52 Update completion for `log` to add `--since` flag
 - felixr/docker-zsh-completion@b3c146a1a2 Update completion for `run` to add `--group-add` flag
 - felixr/docker-zsh-completion@8d4f196ad8 Don't trigger expensive completion function for flags
 - felixr/docker-zsh-completion@bd5aaa124d Add completion for `--help` everywhere
 - felixr/docker-zsh-completion@3a67a0e8c4 Return appropriate status code on completion
 - felixr/docker-zsh-completion@4dfcb450ea Add Steve as a regular contributor.
 - felixr/docker-zsh-completion@996a1c6def Add completion for top-level flags
 - felixr/docker-zsh-completion@b6df75905f Ensure short/long option are not allowed twice
 - felixr/docker-zsh-completion@75b6a500a0 Complete repositories with tags only on repository match
 - felixr/docker-zsh-completion@5e6292135f Factorize completion of images/repositories/tags
 - felixr/docker-zsh-completion@1c504eb677 Handle repositories with ":"
 - felixr/docker-zsh-completion@0a05bf818b Update completion for `pause' and `unpause'
 - felixr/docker-zsh-completion@b3a63253e2 Containers name can include Swarm host

In summary:

 - Swarm support
 - Handling repositories with ":"
 - Rework how completion of images/repositories/tags work:
    - felixr/docker-zsh-completion@5e6292135f
    - felixr/docker-zsh-completion@75b6a500a0
    - felixr/docker-zsh-completion@a93e1cb7bd

The remaining changes are here to sync changes done in Docker repository
(mostly from PR #14074 and #14555, by @sdurrheimer). With some minor changes:

 - boolean flags don't complete their arguments (true/false)
 - reuse of `--host` argument is done with `$opt_arg` to avoid parsing
   error
 - build/create/run common options are factorized out
 - `--help` flag is handled differently
 - `pause` and `unpause` accepts several containers as far as I know, so
   the change is reverted
 - some more, but difficult to notice (more completion for some flags I think)

Some labels are reverted, mostly because I did the merge by copy/pasting
new options instead of modifying existing options.

This commit is partial. The way the `--help` option is handled triggered
a major change due to the way things are quoted. Those changes were
partially and programmaticaly reverted in this commit only to minimize
the changes to review. The next commit will restore the full changes.

Signed-off-by: Vincent Bernat <vincent@bernat.im>
This commit is contained in:
Vincent Bernat 2015-07-16 16:18:31 +02:00 committed by Tibor Vass
parent 6db65bfd6c
commit c15fdb2435
1 changed files with 321 additions and 363 deletions

View File

@ -7,6 +7,7 @@
# #
# contributors: # contributors:
# - Felix Riedel # - Felix Riedel
# - Steve Durrheimer
# - Vincent Bernat # - Vincent Bernat
# #
# license: # license:
@ -38,7 +39,9 @@
# #
__docker_get_containers() { __docker_get_containers() {
local kind expl [[ $PREFIX = -* ]] && return 1
integer ret=1
local kind
declare -a running stopped lines args declare -a running stopped lines args
kind=$1 kind=$1
@ -82,54 +85,77 @@ __docker_get_containers() {
s="${name}:${(l:15:: :::)${${line[${begin[CREATED]},${end[CREATED]}]/ ago/}%% ##}}" s="${name}:${(l:15:: :::)${${line[${begin[CREATED]},${end[CREATED]}]/ ago/}%% ##}}"
s="$s, ${${${line[${begin[IMAGE]},${end[IMAGE]}]}/:/\\:}%% ##}" s="$s, ${${${line[${begin[IMAGE]},${end[IMAGE]}]}/:/\\:}%% ##}"
if [[ ${line[${begin[STATUS]},${end[STATUS]}]} = Exit* ]]; then if [[ ${line[${begin[STATUS]},${end[STATUS]}]} = Exit* ]]; then
stopped=($stopped $s) stopped=($stopped ${s#*/})
else else
running=($running $s) running=($running ${s#*/})
fi fi
done done
done done
[[ $kind = (running|all) ]] && _describe -t containers-running "running containers" running [[ $kind = (running|all) ]] && _describe -t containers-running "running containers" running "$@" && ret=0
[[ $kind = (stopped|all) ]] && _describe -t containers-stopped "stopped containers" stopped [[ $kind = (stopped|all) ]] && _describe -t containers-stopped "stopped containers" stopped "$@" && ret=0
return ret
} }
__docker_stoppedcontainers() { __docker_stoppedcontainers() {
[[ $PREFIX = -* ]] && return 1
__docker_get_containers stopped "$@" __docker_get_containers stopped "$@"
} }
__docker_runningcontainers() { __docker_runningcontainers() {
[[ $PREFIX = -* ]] && return 1
__docker_get_containers running "$@" __docker_get_containers running "$@"
} }
__docker_containers() { __docker_containers() {
[[ $PREFIX = -* ]] && return 1
__docker_get_containers all "$@" __docker_get_containers all "$@"
} }
__docker_images() { __docker_images() {
local expl [[ $PREFIX = -* ]] && return 1
integer ret=1
declare -a images declare -a images
images=(${${${${(f)"$(_call_program commands docker $docker_options images)"}[2,-1]}/ ##/\\:}%% *}) images=(${${${(f)"$(_call_program commands docker $docker_options images)"}[2,-1]}/(#b)([^ ]##) ##([^ ]##) ##([^ ]##)*/${match[3]}:${(r:15:: :::)match[2]} in ${match[1]}})
images=(${${images%\\:<none>}#<none>} ${${${(f)"$(_call_program commands docker $docker_options images)"}[2,-1]}/(#b)([^ ]##) ##([^ ]##) ##([^ ]##)*/${match[3]}:${(r:15:: :::)match[2]} in ${match[1]}}) _describe -t docker-images "images" images && ret=0
_describe -t docker-images "images" images __docker_repositories_with_tags && ret=0
return ret
} }
__docker_tags() { __docker_repositories() {
local expl [[ $PREFIX = -* ]] && return 1
declare -a tags declare -a repos
tags=(${${${${${(f)"$(_call_program commands docker $docker_options images)"}#* }## #}%% *}[2,-1]}) repos=(${${${(f)"$(_call_program commands docker $docker_options images)"}%% *}[2,-1]})
_describe -t docker-tags "tags" tags repos=(${repos#<none>})
_describe -t docker-repos "repositories" repos
} }
__docker_repositories_with_tags() { __docker_repositories_with_tags() {
if compset -P '*:'; then [[ $PREFIX = -* ]] && return 1
__docker_tags integer ret=1
else declare -a repos onlyrepos matched
__docker_repositories -qS ":" declare m
fi repos=(${${${${(f)"$(_call_program commands docker $docker_options images)"}[2,-1]}/ ##/:::}%% *})
repos=(${${repos%:::<none>}#<none>})
# Check if we have a prefix-match for the current prefix.
onlyrepos=(${repos%::*})
for m in $onlyrepos; do
[[ ${PREFIX##${~~m}} != ${PREFIX} ]] && {
# Yes, complete with tags
repos=(${${repos/:::/:}/:/\\:})
_describe -t docker-repos-with-tags "repositories with tags" repos && ret=0
return ret
}
done
# No, only complete repositories
onlyrepos=(${${repos%:::*}/:/\\:})
_describe -t docker-repos "repositories" onlyrepos -qS : && ret=0
return ret
} }
__docker_search() { __docker_search() {
# declare -a dockersearch [[ $PREFIX = -* ]] && return 1
local cache_policy local cache_policy
zstyle -s ":completion:${curcontext}:" cache-policy cache_policy zstyle -s ":completion:${curcontext}:" cache-policy cache_policy
if [[ -z "$cache_policy" ]]; then if [[ -z "$cache_policy" ]]; then
@ -152,20 +178,11 @@ __docker_search() {
} }
__docker_caching_policy() { __docker_caching_policy() {
oldp=( "$1(Nmh+1)" ) # 1 hour oldp=( "$1"(Nmh+1) ) # 1 hour
(( ${#oldp} )) (( $#oldp ))
}
__docker_repositories() {
local expl
declare -a repos
repos=(${${${(f)"$(_call_program commands docker $docker_options images)"}%% *}[2,-1]})
_describe -t docker-repos "repositories" repos "$@"
} }
__docker_commands() { __docker_commands() {
# local -a _docker_subcommands
local cache_policy local cache_policy
zstyle -s ":completion:${curcontext}:" cache-policy cache_policy zstyle -s ":completion:${curcontext}:" cache-policy cache_policy
@ -177,7 +194,7 @@ __docker_commands() {
&& ! _retrieve_cache docker_subcommands; && ! _retrieve_cache docker_subcommands;
then then
local -a lines local -a lines
lines=(${(f)"$(_call_program commands docker $docker_options 2>&1)"}) lines=(${(f)"$(_call_program commands docker 2>&1)"})
_docker_subcommands=(${${${lines[$((${lines[(i)Commands:]} + 1)),${lines[(I) *]}]}## #}/ ##/:}) _docker_subcommands=(${${${lines[$((${lines[(i)Commands:]} + 1)),${lines[(I) *]}]}## #}/ ##/:})
_docker_subcommands=($_docker_subcommands 'help:Show help for a command') _docker_subcommands=($_docker_subcommands 'help:Show help for a command')
_store_cache docker_subcommands _docker_subcommands _store_cache docker_subcommands _docker_subcommands
@ -186,122 +203,124 @@ __docker_commands() {
} }
__docker_subcommand() { __docker_subcommand() {
local -a _command_args local -a _command_args opts_help opts_cpumem opts_create
local expl help="-h --help"
integer ret=1
opts_help=("(: -)"{-h,--help}"[Print usage]")
opts_cpumem=(
"($help -c --cpu-shares)"{-c,--cpu-shares=-}"[CPU shares (relative weight)]:CPU shares:(0 10 100 200 500 800 1000)"
"($help)--cgroup-parent=-[Parent cgroup for the container]:cgroup: "
"($help)--cpu-period=-[Limit the CPU CFS (Completely Fair Scheduler) period]:CPU period: "
"($help)--cpu-quota=-[Limit the CPU CFS (Completely Fair Scheduler) quota]:CPU quota: "
"($help)--cpuset-cpus=-[CPUs in which to allow execution]:CPUs: "
"($help)--cpuset-mems=-[MEMs in which to allow execution]:MEMs: "
"($help -m --memory)"{-m,--memory=-}"[Memory limit]:Memory limit: "
"($help)--memory-swap=-[Total memory limit with swap]:Memory limit: "
)
opts_create=(
"($help -a --attach)"{-a,--attach=-}"[Attach to stdin, stdout or stderr]:device:(STDIN STDOUT STDERR)"
"($help)*--add-host=-[Add a custom host-to-IP mapping]:host\:ip mapping: "
"($help)--blkio-weight=-[Block IO (relative weight), between 10 and 1000]:Block IO weight:(10 100 500 1000)"
"($help)*--cap-add=-[Add Linux capabilities]:capability: "
"($help)*--cap-drop=-[Drop Linux capabilities]:capability: "
"($help)--cidfile=-[Write the container ID to the file]:CID file:_files"
"($help)*--device=-[Add a host device to the container]:device:_files"
"($help)*--dns=-[Set custom dns servers]:dns server: "
"($help)*--dns-search=-[Set custom DNS search domains]:dns domains: "
"($help)*"{-e,--env=-}"[Set environment variables]:environment variable: "
"($help)--entrypoint=-[Overwrite the default entrypoint of the image]:entry point: "
"($help)*--env-file=-[Read environment variables from a file]:environment file:_files"
"($help)*--expose=-[Expose a port from the container without publishing it]: "
"($help)*--group-add=-[Add additional groups to run as]:group:_groups"
"($help -h --hostname)"{-h,--hostname=-}"[Container host name]:hostname:_hosts"
"($help -i --interactive)"{-i,--interactive}"[Keep stdin open even if not attached]"
"($help)--ipc=-[IPC namespace to use]:IPC namespace: "
"($help)*--link=-[Add link to another container]:link:->link"
"($help)*"{-l,--label=-}"[Set meta data on a container]:label: "
"($help)--log-driver=-[Default driver for container logs]:Logging driver:(json-file syslog journald gelf fluentd none)"
"($help)*--log-opt=-[Log driver specific options]:log driver options: "
"($help)*--lxc-conf=-[Add custom lxc options]:lxc options: "
"($help)--mac-address=-[Container MAC address]:MAC address: "
"($help)--name=-[Container name]:name: "
"($help)--net=-[Network mode]:network mode:(bridge none container host)"
"($help)--oom-kill-disable[Disable OOM Killer]"
"($help -P --publish-all)"{-P,--publish-all}"[Publish all exposed ports]"
"($help)*"{-p,--publish=-}"[Expose a container's port to the host]:port:_ports"
"($help)--pid=-[PID namespace to use]:PID: "
"($help)--privileged[Give extended privileges to this container]"
"($help)--read-only[Mount the container's root filesystem as read only]"
"($help)--restart=-[Restart policy]:restart policy:(no on-failure always)"
"($help)*--security-opt=-[Security options]:security option: "
"($help -t --tty)"{-t,--tty}"[Allocate a pseudo-tty]"
"($help -u --user)"{-u,--user=-}"[Username or UID]:user:_users"
"($help)*--ulimit=-[ulimit options]:ulimit: "
"($help)*-v[Bind mount a volume]:volume: "
"($help)*--volumes-from=-[Mount volumes from the specified container]:volume: "
"($help -w --workdir)"{-w,--workdir=-}"[Working directory inside the container]:directory:_directories"
)
case "$words[1]" in case "$words[1]" in
(attach) (attach)
_arguments \ _arguments \
'(- :)--help[Print usage]' \ $opts_help \
'--no-stdin[Do not attach stdin]' \ "($help)--no-stdin[Do not attach stdin]" \
'--sig-proxy[Proxy all received signals to the process (non-TTY mode only)]' \ "($help)--sig-proxy[Proxy all received signals to the process (non-TTY mode only)]" \
':containers:__docker_runningcontainers' && ret=0 "($help -):containers:__docker_runningcontainers" && ret=0
;; ;;
(build) (build)
_arguments \ _arguments \
'(-c --cpu-share)'{-c,--cpu-share=-}'[CPU shares (relative weight)]:CPU shares: ' \ $opts_help \
'--cgroup-parent=-[Optional parent cgroup for the container]:cgroup parent: ' \ $opts_cpumem \
'--cpu-period=-[Limit the CPU CFS (Completely Fair Scheduler) period]:CPU period: ' \ "($help -f --file)"{-f,--file=-}"[Name of the Dockerfile]:Dockerfile:_files" \
'--cpu-quota=-[Limit the CPU CFS (Completely Fair Scheduler) quota]:CPU quota: ' \ "($help)--force-rm[Always remove intermediate containers]" \
'--cpuset-cpus=-[CPUs in which to allow execution (0-3, 0,1)]:CPUs: ' \ "($help)--no-cache[Do not use cache when building the image]" \
'--cpuset-mems=-[MEMs in which to allow execution (0-3, 0,1)]:MEMs: ' \ "($help)--pull[Attempt to pull a newer version of the image]" \
'(-f --file)'{-f,--file=-}"[Name of the Dockerfile (Default is 'PATH/Dockerfile')]:Dockerfile:_files" \ "($help -q --quiet)"{-q,--quiet}"[Suppress verbose build output]" \
'--force-rm[Always remove intermediate containers]' \ "($help)--rm[Remove intermediate containers after a successful build]" \
'(- :)--help[Print usage]' \ "($help -t --tag)"{-t,--tag=-}"[Repository, name and tag for the image]: :__docker_repositories_with_tags" \
'(-m --memory)'{-m,--memory=-}'[Memory limit]:Memory limit: ' \ "($help -):path or URL:_directories" && ret=0
'--memory-swap=-[Total memory (memory + swap), '-1' to disable swap]' \
'--no-cache[Do not use cache when building the image]' \
'--pull[Always attempt to pull a newer version of the image]' \
'(-q --quiet)'{-q,--quiet}'[Suppress the verbose output generated by the containers]' \
'--rm[Remove intermediate containers after a successful build]' \
'(-t --tag)'{-t,--tag=-}'[Repository name (and optionally a tag) for the image]:repository:__docker_repositories_with_tags' \
':path or URL:_directories' && ret=0
;; ;;
(commit) (commit)
_arguments \ _arguments \
'(-a --author)'{-a,--author=-}'[Author]:author: ' \ $opts_help \
'*'{-c,--change=-}'[Apply Dockerfile instruction to the created image]' \ "($help -a --author)"{-a,--author=-}"[Author]:author: " \
'(- :)--help[Print usage]' \ "($help -c --change)*"{-c,--change=-}"[Apply Dockerfile instruction to the created image]:Dockerfile:_files" \
'(-m --message)'{-m,--message=-}'[Commit message]:message: ' \ "($help -m --message)"{-m,--message=-}"[Commit message]:message: " \
'(-p --pause)'{-p,--pause}'[Pause container during commit]' \ "($help -p --pause)"{-p,--pause}"[Pause container during commit]" \
':container:__docker_containers' \ "($help -):container:__docker_containers" \
':repository:__docker_repositories_with_tags' && ret=0 "($help -): :__docker_repositories_with_tags" && ret=0
;; ;;
(cp) (cp)
_arguments \ _arguments \
'(- :)--help[Print usage]' \ $opts_help \
':container:->container' \ "($help -)1:container:->container" \
':hostpath:_files' && ret=0 "($help -)2:hostpath:_files" && ret=0
case $state in case $state in
(container) (container)
if compset -P '*:'; then if compset -P "*:"; then
_files _files && ret=0
else else
__docker_containers -qS ":" __docker_containers -qS ":" && ret=0
fi fi
;; ;;
esac esac
;; ;;
(create) (create)
_arguments \ _arguments \
'*'{-a,--attach=-}'[Attach to STDIN, STDOUT or STDERR]:STD:(STDIN STDOUT STDERR)' \ $opts_help \
'*--add-host=-[Add a custom host-to-IP mapping (host:ip)]:host\:ip mapping: ' \ $opts_cpumem \
'--blkio-weight=-[Block IO (relative weight), between 10 and 1000]:Block IO weight: ' \ $opts_create \
'(-c --cpu-shares)'{-c,--cpu-shares=-}'[CPU shares (relative weight)]:CPU shares:(0 10 100 200 500 800 1000)' \ "($help -): :__docker_images" \
'*--cap-add=-[Add Linux capabilities]:capability: ' \ "($help -):command: _command_names -e" \
'*--cap-drop=-[Drop Linux capabilities]:capability: ' \ "($help -)*::arguments: _normal" && ret=0
'--cgroup-parent=-[Optional parent cgroup for the container]:cgroup parent: ' \
'--cidfile=-[Write the container ID to the file]:CID:_files' \
'--cpu-period=-[Limit CPU CFS (Completely Fair Scheduler) period]:CPU period: ' \
'--cpu-quota=-[Limit the CPU CFS quota]:CPU quota: ' \
'--cpuset-cpus=-[CPUs in which to allow execution (0-3, 0,1)]:CPUs: ' \
'--cpuset-mems=-[MEMs in which to allow execution (0-3, 0,1)]:MEMs: ' \
'*--device=-[Add a host device to the container]:device:_files' \
'*--dns=-[Set custom dns servers]:dns server: ' \
'*--dns-search=-[Set custom DNS search domains]:dns domains: ' \
'*'{-e,--env=-}'[Set environment variables]:environment variable: ' \
'--entrypoint=-[Overwrite the default ENTRYPOINT of the image]:entry point: ' \
'*--env-file=-[Read in a file of environment variables]:environment file:_files' \
'*--expose=-[Expose a port or a range of ports]:port or a range of ports: ' \
'(-h --hostname)'{-h,--hostname=-}'[Container host name]:hostname:_hosts' \
'(- :)--help[Print usage]' \
'(-i --interactive)'{-i,--interactive}'[Keep STDIN open even if not attached]' \
'--ipc=-[IPC namespace to use]:IPC namespace: ' \
'*'{-l,--label=-}'[Set meta data on a container]:Label: ' \
'*--label-file=-[Read in a line delimited file of labels]' \
'*--link=-[Add link to another container]:link:->link' \
'--log-driver=-[Logging driver for container]:Logging driver:(json-file syslog journald gelf fluentd none)' \
'*--log-opt=-[Log driver options]:Log driver options: ' \
'*--lxc-conf=-[Add custom lxc options]:lxc options: ' \
'(-m --memory)'{-m,--memory=-}'[Memory limit (in bytes)]:Memory limit: ' \
'--mac-address=-[Container MAC address (e.g. 92:d0:c6:0a:29:33)]:MAC address: ' \
"--memory-swap=-[Total memory (memory + swap), '-1' to disable swap]:Total memory: " \
'--name=-[Assign a name to the container]:name: ' \
'--net=-[Set the Network mode for the container]:network mode:(bridge none container host)' \
'--oom-kill-disable[Disable OOM Killer]' \
'(-P --publish-all)'{-P,--publish-all}'[Publish all exposed ports to random ports]' \
'*'{-p,--publish=-}"[Publish a container's port(s) to the host]:port:_ports" \
'--pid=-[PID namespace to use]:PID: ' \
'--privileged[Give extended privileges to this container]' \
"--read-only[Mount the container's root filesystem as read only]" \
'--restart=-[Restart policy]:restart policy:(no on-failure always)' \
'--rm[Remove intermediate containers when it exits]' \
'*--security-opt=-[Security options]:security option: ' \
'(-t --tty)'{-t,--tty}'[Allocate a pseudo-TTY]' \
'(-u --user)'{-u,--user=-}'[Username or UID]:user:_users' \
'*--ulimit=-[Ulimit options]:ulimit: ' \
'--uts=-[UTS namespace to use]:UTS: ' \
'*'{-v,--volume=-}'[Bind mount a volume]:volume: ' \
'*--volumes-from=-[Mount volumes from the specified container]:volume: ' \
'(-w --workdir)'{-w,--workdir=-}'[Working directory inside the container]:directory:_directories' \
'(-):images:__docker_images' \
'(-):command: _command_names -e' \
'*::arguments: _normal' && ret=0
case $state in case $state in
(link) (link)
if compset -P '*:'; then if compset -P "*:"; then
_wanted alias expl 'Alias' compadd -E "" _wanted alias expl "Alias" compadd -E "" && ret=0
else else
__docker_runningcontainers -qS ":" __docker_runningcontainers -qS ":" && ret=0
fi fi
;; ;;
esac esac
@ -309,239 +328,190 @@ __docker_subcommand() {
;; ;;
(diff) (diff)
_arguments \ _arguments \
'(- :)--help[Print usage]' \ $opts_help \
'*:containers:__docker_containers' && ret=0 "($help -)*:containers:__docker_containers" && ret=0
;; ;;
(events) (events)
_arguments \ _arguments \
'*'{-f,--filter=-}'[Filter output based on conditions provided]:filter: ' \ $opts_help \
'(- :)--help[Print usage]' \ "($help)*"{-f,--filter=-}"[Filter values]:filter: " \
'--since=-[Show all events created since timestamp]:timestamp: ' \ "($help)--since=-[Events created since this timestamp]:timestamp: " \
'--until=-[Stream events until this timestamp]:timestamp: ' && ret=0 "($help)--until=-[Events created until this timestamp]:timestamp: " && ret=0
;; ;;
(exec) (exec)
local state local state
_arguments \ _arguments \
'(-d --detach)'{-d,--detach}'[Detached mode: run command in the background]' \ $opts_help \
'(- :)--help[Print usage]' \ "($help -d --detach)"{-d,--detach}"[Detached mode: leave the container running in the background]" \
'(-i --interactive)'{-i,--interactive}'[Keep STDIN open even if not attached]' \ "($help -i --interactive)"{-i,--interactive}"[Keep stdin open even if not attached]" \
'(-t --tty)'{-t,--tty}'[Allocate a pseudo-TTY]' \ "($help -t --tty)"{-t,--tty}"[Allocate a pseudo-tty]" \
'(-u --user)'{-u,--user=-}'[Username or UID]:User: ' \ "($help -u --user)"{-u,--user=-}"[Username or UID]:user:_users" \
':containers:__docker_runningcontainers' \ "($help -):containers:__docker_runningcontainers" \
'*::command:->anycommand' && ret=0 "($help -)*::command:->anycommand" && ret=0
case $state in case $state in
(anycommand) (anycommand)
shift 1 words shift 1 words
(( CURRENT-- )) (( CURRENT-- ))
_normal _normal && ret=0
;; ;;
esac esac
return ret
;; ;;
(export) (export)
_arguments \ _arguments \
'(- :)--help[Print usage]' \ $opts_help \
'(-o --output)'{-o,--output=-}'[Write to a file, instead of STDOUT]:file: ' \ "($help -o --output)"{-o,--output=-}"[Write to a file, instead of stdout]:output file:_files" \
'*:containers:__docker_containers' && ret=0 "($help -)*:containers:__docker_containers" && ret=0
;; ;;
(history) (history)
_arguments \ _arguments \
'(-H --human)'{-H,--human}'[Print sizes and dates in human readable format]' \ $opts_help \
'(- :)--help[Print usage]' \ "($help -H --human)"{-H,--human}"[Print sizes and dates in human readable format]" \
'--no-trunc[Do not truncate output]' \ "($help)--no-trunc[Do not truncate output]" \
'(-q --quiet)'{-q,--quiet}'[Only show numeric IDs]' \ "($help -q --quiet)"{-q,--quiet}"[Only show numeric IDs]" \
'*:images:__docker_images' && ret=0 "($help -)*: :__docker_images" && ret=0
;; ;;
(images) (images)
_arguments \ _arguments \
'(-a --all)'{-a,--all}'[Show all images (default hides intermediate images)]' \ $opts_help \
'--digests[Show digests]' \ "($help -a --all)"{-a,--all}"[Show all images]" \
'*'{-f,--filter=-}'[Filter output based on conditions provided]:filter: ' \ "($help)--digest[Show digests]" \
'(- :)--help[Print usage]' \ "($help)*"{-f,--filter=-}"[Filter values]:filter: " \
'--no-trunc[Do not truncate output]' \ "($help)--no-trunc[Do not truncate output]" \
'(-q --quiet)'{-q,--quiet}'[Only show numeric IDs]' \ "($help -q --quiet)"{-q,--quiet}"[Only show numeric IDs]" \
':repository:__docker_repositories' && ret=0 "($help -): :__docker_repositories" && ret=0
;; ;;
(import) (import)
_arguments \ _arguments \
'*'{-c,--change=-}'[Apply Dockerfile instruction to the created image]' \ $opts_help \
'(- :)--help[Print usage]' \ "($help -c --change)*"{-c,--change=-}"[Apply Dockerfile instruction to the created image]:Dockerfile:_files" \
':URL:(http:// file://)' \ "($help -):URL:(- http:// file://)" \
':repository:__docker_repositories_with_tags' && ret=0 "($help -): :__docker_repositories_with_tags" && ret=0
;; ;;
(info|version) (info|version)
_arguments \ _arguments \
'(- :)--help[Print usage]' && ret=0 $opts_help && ret=0
;; ;;
(inspect) (inspect)
_arguments \ _arguments \
'(-f --format)'{-f,--format=-}'[Format the output using the given go template]:template: ' \ $opts_help \
'(- :)--help[Print usage]' \ "($help -f --format=-)"{-f,--format=-}"[Format the output using the given go template]:template: " \
'--type=-[Return JSON for specified type, permissible values are "image" or "container"]:type:(image container)' \ "($help)--type=-[Return JSON for specified type]:type:(image container)" \
'*:containers:__docker_containers' && ret=0 "($help -)*:containers:__docker_containers" && ret=0
;; ;;
(kill) (kill)
_arguments \ _arguments \
'(- :)--help[Print usage]' \ $opts_help \
'(-s --signal)'{-s,--signal=-}'[Signal to send to the container]:signal:_signals' \ "($help -s --signal)"{-s,--signal=-}"[Signal to send]:signal:_signals" \
'*:containers:__docker_runningcontainers' && ret=0 "($help -)*:containers:__docker_runningcontainers" && ret=0
;; ;;
(load) (load)
_arguments \ _arguments \
'(- :)--help[Print usage]' \ $opts_help \
'(-i --input)'{-i,--input=-}'[Read from a tar archive file, instead of STDIN]:archive file:_files -g "*.((tar|TAR)(.gz|.GZ|.Z|.bz2|.lzma|.xz|)|(tbz|tgz|txz))(-.)"' && ret=0 "($help -i --input)"{-i,--input=-}"[Read from tar archive file]:archive file:_files -g "*.((tar|TAR)(.gz|.GZ|.Z|.bz2|.lzma|.xz|)|(tbz|tgz|txz))(-.)"" && ret=0
;; ;;
(login) (login)
_arguments \ _arguments \
'(-e --email)'{-e,--email=-}'[Email]:email: ' \ $opts_help \
'(- :)--help[Print usage]' \ "($help -e --email)"{-e,--email=-}"[Email]:email: " \
'(-p --password)'{-p,--password=-}'[Password]:password: ' \ "($help -p --password)"{-p,--password=-}"[Password]:password: " \
'(-u --user)'{-u,--user=-}'[Username]:username: ' \ "($help -u --user)"{-u,--user=-}"[Username]:username: " \
'1:server:->string' && ret=0 "($help -)1:server: " && ret=0
;; ;;
(logout) (logout)
_arguments \ _arguments \
'(- :)--help[Print usage]' \ $opts_help \
'1:server:->string' && ret=0 "($help -)1:server: " && ret=0
;; ;;
(logs) (logs)
_arguments \ _arguments \
'(-f --follow)'{-f,--follow}'[Follow log output]' \ $opts_help \
'(- :)--help[Print usage]' \ "($help -f --follow)"{-f,--follow}"[Follow log output]" \
'--since=-[Show logs since timestamp]:timestamp: ' \ "($help -s --since)"{-s,--since=-}"[Show logs since this timestamp]:timestamp: " \
'(-t --timestamps)'{-t,--timestamps}'[Show timestamps]' \ "($help -t --timestamps)"{-t,--timestamps}"[Show timestamps]" \
'--tail=-[Number of lines to show from the end of the logs]:lines:(1 10 20 50 all)' \ "($help)--tail=-[Output the last K lines]:lines:(1 10 20 50 all)" \
'*:containers:__docker_containers' && ret=0 "($help -)*:containers:__docker_containers" && ret=0
;; ;;
(pause|unpause) (pause|unpause)
_arguments \ _arguments \
'(- :)--help[Print usage]' \ $opts_help \
'*:containers:__docker_runningcontainers' && ret=0 "($help -)*:containers:__docker_runningcontainers" && ret=0
;; ;;
(port) (port)
_arguments \ _arguments \
'(- :)--help[Print usage]' \ $opts_help \
'1:containers:__docker_runningcontainers' \ "($help -)1:containers:__docker_runningcontainers" \
'2:port:_ports' && ret=0 "($help -)2:port:_ports" && ret=0
;; ;;
(ps) (ps)
_arguments \ _arguments \
'(-a --all)'{-a,--all}'[how all containers (default shows just running)]' \ $opts_help \
'--before=-[Show only container created before Id or Name]:containers:__docker_containers' \ "($help -a --all)"{-a,--all}"[Show all containers]" \
'*'{-f,--filter=-}'[Filter output based on conditions provided]:filter: ' \ "($help)--before=-[Show only container created before...]:containers:__docker_containers" \
'(- :)--help[Print usage]' \ "($help)*"{-f,--filter=-}"[Filter values]:filter: " \
'(-l --latest)'{-l,--latest}'[Show the latest created container, include non-running]' \ "($help -l --latest)"{-l,--latest}"[Show only the latest created container]" \
'-n[Show n last created containers, include non-running]:n:(1 5 10 25 50)' \ "($help)-n[Show n last created containers, include non-running one]:n:(1 5 10 25 50)" \
'--no-trunc[Do not truncate output]' \ "($help)--no-trunc[Do not truncate output]" \
'(-q --quiet)'{-q,--quiet}'[Only show numeric IDs]' \ "($help -q --quiet)"{-q,--quiet}"[Only show numeric IDs]" \
'(-s --size)'{-s,--size}'[Display total file sizes]' \ "($help -s --size)"{-s,--size}"[Display total file sizes]" \
'--since=-[Show created since Id or Name, include non-running]:containers:__docker_containers' && ret=0 "($help)--since=-[Show only containers created since...]:containers:__docker_containers" && ret=0
;; ;;
(pull) (pull)
_arguments \ _arguments \
'(-a --all-tags)'{-a,--all-tags}'[Download all tagged images in the repository]' \ $opts_help \
'(- :)--help[Print usage]' \ "($help -a --all-tags)"{-a,--all-tags}"[Download all tagged images]" \
':name:__docker_search' && ret=0 "($help -):name:__docker_search" && ret=0
;; ;;
(push) (push)
_arguments \ _arguments \
'(- :)--help[Print usage]' \ $opts_help \
':images:__docker_images' && ret=0 "($help -): :__docker_images" && ret=0
;; ;;
(rename) (rename)
_arguments \ _arguments \
'(- :)--help[Print usage]' \ $opts_help \
':old name:__docker_containers' \ "($help -):old name:__docker_containers" \
':new name: ' && ret=0 "($help -):new name: " && ret=0
;; ;;
(restart|stop) (restart|stop)
_arguments \ _arguments \
'(- :)--help[Print usage]' \ $opts_help \
'(-t --time)'{-t,--time=-}'[Seconds to wait for stop before killing the container]:seconds to before killing:(1 5 10 30 60)' \ "($help -t --time=-)"{-t,--time=-}"[Number of seconds to try to stop for before killing the container]:seconds to before killing:(1 5 10 30 60)" \
'*:containers:__docker_runningcontainers' && ret=0 "($help -)*:containers:__docker_runningcontainers" && ret=0
;; ;;
(rm) (rm)
_arguments \ _arguments \
'(-f --force)'{-f,--force}'[Force the removal of a running container (uses SIGKILL)]' \ $opts_help \
'(- :)--help[Print usage]' \ "($help -f --force)"{-f,--force}"[Force removal]" \
'(-l --link)'{-l,--link}'[Remove the specified link and not the underlying container]' \ "($help -l --link)"{-l,--link}"[Remove the specified link and not the underlying container]" \
'(-v --volumes)'{-v,--volumes}'[Remove the volumes associated to the container]' \ "($help -v --volumes)"{-v,--volumes}"[Remove the volumes associated to the container]" \
'*:containers:__docker_stoppedcontainers' && ret=0 "($help -)*:containers:__docker_stoppedcontainers" && ret=0
;; ;;
(rmi) (rmi)
_arguments \ _arguments \
'(-f --force)'{-f,--force}'[Force removal of the image]' \ $opts_help \
'(- :)--help[Print usage]' \ "($help -f --force)"{-f,--force}"[Force removal]" \
'--no-prune[Do not delete untagged parents]' \ "($help)--no-prune[Do not delete untagged parents]" \
'*:images:__docker_images' && ret=0 "($help -)*: :__docker_images" && ret=0
;; ;;
(run) (run)
_arguments \ _arguments \
'*'{-a,--attach=-}'[Attach to STDIN, STDOUT or STDERR]:STD:(STDIN STDOUT STDERR)' \ $opts_help \
'*--add-host=-[Add a custom host-to-IP mapping (host\:ip)]:host\:ip mapping: ' \ $opts_cpumem \
'--blkio-weight=-[Block IO (relative weight), between 10 and 1000]:Block IO weight: ' \ $opts_create \
'(-c --cpu-shares)'{-c,--cpu-shares=-}'[CPU shares (relative weight)]:CPU shares:(0 10 100 200 500 800 1000)' \ "($help -d --detach)"{-d,--detach}"[Detached mode: leave the container running in the background]" \
'*--cap-add=-[Add Linux capabilities]:capability: ' \ "($help)--rm[Remove intermediate containers when it exits]" \
'*--cap-drop=-[Drop Linux capabilities]:capability: ' \ "($help)--sig-proxy[Proxy all received signals to the process (non-TTY mode only)]" \
'--cgroup-parent=-[Optional parent cgroup for the container]:cgroup parent: ' \ "($help -): :__docker_images" \
'--cidfile=-[Write the container ID to the file]:CID file:_files' \ "($help -):command: _command_names -e" \
'--cpu-period=-[Limit CPU CFS (Completely Fair Scheduler) period]:CPU period: ' \ "($help -)*::arguments: _normal" && ret=0
'--cpu-quota=-[Limit the CPU CFS quota]:CPU quota: ' \
'--cpuset-cpus=-[CPUs in which to allow execution (0-3, 0,1)]:CPUs: ' \
'--cpuset-mems=-[MEMs in which to allow execution (0-3, 0,1)]:MEMs: ' \
'(-d --detach)'{-d,--detach}'[Run container in background and print container ID]' \
'*--device=-[Add a host device to the container]:device:_files' \
'*--dns=-[Set custom dns servers]:dns server: ' \
'*--dns-search=-[Set custom DNS search domains]:dns domains: ' \
'*'{-e,--env=-}'[Set environment variables]:environment variable: ' \
'--entrypoint=-[Overwrite the default ENTRYPOINT of the image]:entry point: ' \
'*--env-file=-[Read in a file of environment variables]:environment file:_files' \
'*--expose=-[Expose a port or a range of ports]:port or a range of ports: ' \
'*--group-add=-[Add additional groups to run as]:group: ' \
'(-h --hostname)'{-h,--hostname=-}'[Container host name]:hostname:_hosts' \
'(- :)--help[Print usage]' \
'(-i --interactive)'{-i,--interactive}'[Keep STDIN open even if not attached]' \
'--ipc=-[IPC namespace to use]:IPC: ' \
'*'{-l,--label=-}'[Set meta data on a container]:Label: ' \
'*--label-file=-[Read in a line delimited file of labels]' \
'*--link=-[Add link to another container]:link:->link' \
'--log-driver=-[Logging driver for container]:Logging driver:(json-file syslog journald gelf fluentd none)' \
'*--log-opt=-[Log driver options]:Log driver options: ' \
'*--lxc-conf=-[Add custom lxc options]:lxc options: ' \
'(-m --memory)'{-m,--memory=-}'[Memory limit (in bytes)]:Memory limit: ' \
'--mac-address=-[Container MAC address (e.g. 92:d0:c6:0a:29:33)]:MAC address: ' \
"--memory-swap=-[Total memory (memory + swap), '-1' to disable swap]:Total memory: " \
'--name=-[Assign a name to the container]:name: ' \
'--net=-[Set the Network mode for the container]:network mode:(bridge none container host)' \
'--oom-kill-disable[Disable OOM Killer]' \
'(-P --publish-all)'{-P,--publish-all}'[Publish all exposed ports to random ports]' \
'*'{-p,--publish=-}"[Publish a container's port(s) to the host]:port:_ports" \
'--pid=-[PID namespace to use]:PID: ' \
'--privileged[Give extended privileges to this container]' \
"--read-only[Mount the container's root filesystem as read only]" \
'--restart=-[Restart policy]:restart policy:(no on-failure always)' \
'--rm[Remove intermediate containers when it exits]' \
'*--security-opt=-[Security options]:security option: ' \
'--sig-proxy[Proxy all received signals to the process (non-TTY mode only)]' \
'(-t --tty)'{-t,--tty}'[Allocate a pseudo-TTY]' \
'(-u --user)'{-u,--user=-}'[Username or UID]:user:_users' \
'*--ulimit=-[Ulimit options]:ulimit: ' \
'--uts=-[UTS namespace to use]:UTS: ' \
'*'{-v,--volume=-}'[Bind mount a volume]:volume: ' \
'*--volumes-from=-[Mount volumes from the specified container]:volume: ' \
'(-w --workdir)'{-w,--workdir=-}'[Working directory inside the container]:directory:_directories' \
'(-):images:__docker_images' \
'(-):command: _command_names -e' \
'*::arguments: _normal' && ret=0
case $state in case $state in
(link) (link)
if compset -P '*:'; then if compset -P "*:"; then
_wanted alias expl 'Alias' compadd -E "" _wanted alias expl "Alias" compadd -E "" && ret=0
else else
__docker_runningcontainers -qS ":" __docker_runningcontainers -qS ":" && ret=0
fi fi
;; ;;
esac esac
@ -549,62 +519,61 @@ __docker_subcommand() {
;; ;;
(save) (save)
_arguments \ _arguments \
'(- :)--help[Print usage]' \ $opts_help \
'(-o --output)'{-o,--output=-}'[Write to file]:file: ' \ "($help -o --output)"{-o,--output=-}"[Write to file]:file:_files" \
'*:images:__docker_images' && ret=0 "($help -)*: :__docker_images" && ret=0
;; ;;
(search) (search)
_arguments \ _arguments \
'--automated[Only show automated builds]' \ $opts_help \
'(- :)--help[Print usage]' \ "($help)--automated[Only show automated builds]" \
'--no-trunc[Do not truncate output]' \ "($help)--no-trunc[Do not truncate output]" \
'(-s --stars)'{-s,--stars=-}'[Only display with at least X stars]:stars:(0 10 100 1000)' \ "($help -s --stars)"{-s,--stars=-}"[Only display with at least X stars]:stars:(0 10 100 1000)" \
'1:term:->string' && ret=0 "($help -):term: " && ret=0
;; ;;
(start) (start)
_arguments \ _arguments \
'(-a --attach)'{-a,--attach}'[Attach STDOUT/STDERR and forward signals]' \ $opts_help \
'(- :)--help[Print usage]' \ "($help -a --attach)"{-a,--attach}"[Attach container's stdout/stderr and forward all signals]" \
'(-i --interactive)'{-i,--interactive}"[Attach container's STDIN]" \ "($help -i --interactive)"{-i,--interactive}"[Attach container's stding]" \
'*:containers:__docker_stoppedcontainers' && ret=0 "($help -)*:containers:__docker_stoppedcontainers" && ret=0
;; ;;
(stats) (stats)
_arguments \ _arguments \
'(- :)--help[Print usage]' \ $opts_help \
'--no-stream[Disable streaming stats and only pull the first result]' \ "($help)--no-stream[Disable streaming stats and only pull the first result]" \
'*:containers:__docker_runningcontainers' && ret=0 "($help -)*:containers:__docker_runningcontainers" && ret=0
;; ;;
(tag) (tag)
_arguments \ _arguments \
'(-f --force)'{-f,--force}'[force]' \ $opts_help \
'(- :)--help[Print usage]' \ "($help -f --force)"{-f,--force}"[force]"\
':image:__docker_images' \ "($help -):source:__docker_images"\
':repository:__docker_repositories_with_tags' && ret=0 "($help -):destination:__docker_repositories_with_tags" && ret=0
;; ;;
(top) (top)
_arguments \ _arguments \
'(- :)--help[Print usage]' \ $opts_help \
'1:containers:__docker_runningcontainers' \ "($help -)1:containers:__docker_runningcontainers" \
'(-)*:: :->ps-arguments' && ret=0 "($help -)*:: :->ps-arguments" && ret=0
case $state in case $state in
(ps-arguments) (ps-arguments)
_ps _ps && ret=0
;; ;;
esac esac
;; ;;
(wait) (wait)
_arguments \ _arguments \
'(- :)--help[Print usage]' \ $opts_help \
'*:containers:__docker_runningcontainers' && ret=0 "($help -)*:containers:__docker_runningcontainers" && ret=0
;; ;;
(help) (help)
_arguments ':subcommand:__docker_commands' && ret=0 _arguments ":subcommand:__docker_commands" && ret=0
;; ;;
(*)
_message 'Unknown sub command'
esac esac
return ret
} }
_docker() { _docker() {
@ -615,70 +584,59 @@ _docker() {
return return
fi fi
local curcontext="$curcontext" state line local curcontext="$curcontext" state line help="-h --help"
typeset -A opt_args
integer ret=1 integer ret=1
typeset -A opt_args
_arguments -C \ _arguments -C \
'--api-cors-header=-[Set CORS headers in the remote API]:CORS headers: ' \ "(: -)"{-h,--help}"[Print usage]" \
'(-b --bridge)'{-b,--bridge=-}'[Attach containers to a network bridge]:bridge: ' \ "($help)--api-cors-header=-[Set CORS headers in the remote API]:CORS headers: " \
'--bip=-[Specify network bridge IP]' \ "($help -b --bridge)"{-b,--bridge=-}"[Attach containers to a network bridge]:bridge:_net_interfaces" \
'(-D --debug)'{-D,--debug}'[Enable debug mode]' \ "($help)--bip=-[Specify network bridge IP]" \
'(-d --daeamon)'{-d,--daemon}'[Enable daemon mode]' \ "($help -D --debug)"{-D,--debug}"[Enable debug mode]" \
'--default-gateway[Container default gateway IPv4 address]:IPv4 address: ' \ "($help -d --daeamon)"{-d,--daemon}"[Enable daemon mode]" \
'--default-gateway-v6[Container default gateway IPv6 address]:IPv6 address: ' \ "($help)--default-gateway[Container default gateway IPv4 address]:IPv4 address: " \
'*--dns=-[DNS server to use]:DNS: ' \ "($help)--default-gateway-v6[Container default gateway IPv6 address]:IPv6 address: " \
'*--dns-search=-[DNS search domains to use]' \ "($help)*--dns=-[DNS server to use]:DNS: " \
'*--default-ulimit=-[Set default ulimit settings for containers]:ulimit: ' \ "($help)*--dns-search=-[DNS search domains to use]" \
'(-e --exec-driver)'{-e,--exec-driver=-}'[Exec driver to use]:driver:(native lxc Windows)' \ "($help)*--default-ulimit=-[Set default ulimit settings for containers]:ulimit: " \
'*--exec-opt=-[Set exec driver options]:exec driver options: ' \ "($help -e --exec-driver)"{-e,--exec-driver=-}"[Exec driver to use]:driver:(native lxc windows)" \
'--exec-root=-[Root of the Docker execdriver (default: /var/run/docker)]:PATH:_directories' \ "($help)*--exec-opt=-[Set exec driver options]:exec driver options: " \
'--fixed-cidr=-[IPv4 subnet for fixed IPs]:IPv4 subnet: ' \ "($help)--exec-root=-[Root of the Docker execdriver]:path:_directories" \
'--fixed-cidr-v6=-[IPv6 subnet for fixed IPs]:IPv6 subnet: ' \ "($help)--fixed-cidr=-[IPv4 subnet for fixed IPs]:IPv4 subnet: " \
'(-G --group)'{-G,--group=-}'[Group for the unix socket (default: docker)]:group:_groups' \ "($help)--fixed-cidr-v6=-[IPv6 subnet for fixed IPs]:IPv6 subnet: " \
'(-g --graph)'{-g,--graph=-}'[Root of the Docker runtime (default: /var/lib/docker)]:PATH:_directories' \ "($help -G --group)"{-G,--group=-}"[Group for the unix socket]:group:_groups" \
'(-H --host)'{-H,--host=-}'[tcp://host:port to bind/connect to]:host: ' \ "($help -g --graph)"{-g,--graph=-}"[Root of the Docker runtime]:path:_directories" \
'(-h --help)'{-h,--help}'[Print usage]' \ "($help -H --host)"{-H,--host=-}"[tcp://host:port to bind/connect to]:host: " \
'--icc[Enable inter-container communication]' \ "($help)--icc[Enable inter-container communication]" \
'*--insecure-registry=-[Enable insecure registry communication]:registry: ' \ "($help)*--insecure-registry=-[Enable insecure registry communication]:registry: " \
'--ip=-[Default IP when binding container ports (default: 0.0.0.0)]' \ "($help)--ip=-[Default IP when binding container ports]" \
'--ip-forward=-[Enable net.ipv4.ip_forward]:enable:(true false)' \ "($help)--ip-forward[Enable net.ipv4.ip_forward]" \
'--ip-masq=-[Enable IP masquerading]:enable:(true false)' \ "($help)--ip-masq[Enable IP masquerading]" \
'--iptables=-[Enable addition of iptables rules]:enable:(true false)' \ "($help)--iptables[Enable addition of iptables rules]" \
'--ipv6[Enable IPv6 networking]' \ "($help)--ipv6[Enable IPv6 networking]" \
'(-l --log-level)'{-l,--log-level=-}'[Set the logging level]:level:(debug info warn error fatal)' \ "($help -l --log-level)"{-l,--log-level=-}"[Set the logging level]:level:(debug info warn error fatal)" \
'*--label=-[Set key=value labels to the daemon]:label: ' \ "($help)*--label=-[Set key=value labels to the daemon]:label: " \
'--log-driver=-[Default driver for container logs (default: json-file)]:Logging driver:(json-file syslog journald gelf fluentd none)' \ "($help)--log-driver=-[Default driver for container logs]:Logging driver:(json-file syslog journald gelf fluentd none)" \
'*--log-opt=-[Log driver specific options]:log driver options: ' \ "($help)*--log-opt=-[Log driver specific options]:log driver options: " \
'--mtu=-[Set the containers network MTU (default: 0)]' \ "($help)--mtu=-[Set the containers network MTU]:mtu:(0 576 1420 1500 9000)" \
'(-p --pidfile)'{-p,--pidfile=-}'[Path to use for daemon PID file (default: /var/run/docker.pid)]:PID file PATH: ' \ "($help -p --pidfile)"{-p,--pidfile=-}"[Path to use for daemon PID file]:PID file:_files" \
'*--registry-mirror=-[Preferred Docker registry mirror]:registry mirror: ' \ "($help)*--registry-mirror=-[Preferred Docker registry mirror]:registry mirror: " \
'(-s --storage-driver)'{-s,--storage-driver=-}'[Storage driver to use]:driver:(aufs devicemapper btrfs zfs overlay)' \ "($help -s --storage-driver)"{-s,--storage-driver=-}"[Storage driver to use]:driver:(aufs devicemapper btrfs zfs overlay)" \
'--selinux-enabled[Enable selinux support]' \ "($help)--selinux-enabled[Enable selinux support]" \
'*--storage-opt=-[Set storage driver options]:storage driver options: ' \ "($help)*--storage-opt=-[Set storage driver options]:storage driver options: " \
'--tls[Use TLS; implied by --tlsverify]' \ "($help)--tls[Use TLS]" \
'--tlscacert=-[Trust certs signed only by this CA (default: ~/.docker/ca.pem)]' \ "($help)--tlscacert=-[Trust certs signed only by this CA]:PEM file:_files -g "*.(pem|crt)"" \
'--tlscert=-[Path to TLS certificate file (default: ~/.docker/cert.pem)]' \ "($help)--tlscert=-[Path to TLS certificate file]:PEM file:_files -g "*.(pem|crt)"" \
'--tlskey=-[Path to TLS key file (default: ~/.docker/key.pem)]' \ "($help)--tlskey=-[Path to TLS key file]:Key file:_files -g "*.(pem|key)"" \
'--tlsverify[Use TLS and verify the remote]' \ "($help)--tlsverify[Use TLS and verify the remote]" \
'--userland-proxy=-[Use userland proxy for loopback traffic]:enable:(true false)' \ "($help)--userland-proxy[Use userland proxy for loopback traffic]" \
'(-v --version)'{-v,--version}'[Print version information and quit]' \ "($help -v --version)"{-v,--version}"[Print version information and quit]" \
'(-): :->command' \ "($help -): :->command" \
'(-)*:: :->option-or-argument' && ret=0 "($help -)*:: :->option-or-argument" && ret=0
local counter=1 local host=${opt_args[-H]}${opt_args[--host]}
while [ $counter -lt ${#words} ]; do local docker_options=${host:+--host $host}
case "${words[$counter]}" in
--host|-H)
(( counter++ ))
host="${words[$counter]}"
;;
*)
;;
esac
(( counter++ ))
done
docker_options=${host:+-H "$host"}
case $state in case $state in
(command) (command)