Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
Ohmyzsh
Commits
a93bb4e6
Commit
a93bb4e6
authored
Aug 30, 2016
by
kenleytomlin
Browse files
Update the docker completion script with the official docker zsh
completion script
parent
3c8a3336
Changes
1
Show whitespace changes
Inline
Side-by-side
plugins/docker/_docker
View file @
a93bb4e6
#compdef docker
#compdef docker dockerd
#
# zsh completion for docker (http://docker.com)
#
# version: 0.3.0
# github: https://github.com/felixr/docker-zsh-completion
#
# contributors:
# - Felix Riedel
# - Steve Durrheimer
# - Vincent Bernat
#
# license:
#
# Copyright (c) 2013, Felix Riedel
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# * Neither the name of the <organization> nor the
# names of its contributors may be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# Docker autocompletion for oh-my-zsh
# Short-option stacking can be enabled with:
# Requires: Docker installed
# zstyle ':completion:*:*:docker:*' option-stacking yes
# Author: Azaan (@aeonazaan)
# zstyle ':completion:*:*:docker-*:*' option-stacking yes
# Updates: Bob Maerten (@bobmaerten) for Docker v0.9+
__docker_arguments
()
{
# Paul van den Berg (@bergvandenp) for Docker v1.3+
if
zstyle
-t
":completion:
${
curcontext
}
:"
option-stacking
;
then
print
--
-s
fi
}
__docker_get_containers
()
{
[[
$PREFIX
=
-
*
]]
&&
return
1
integer
ret
=
1
local
kind
type
line s
declare
-a
running stopped lines args names
kind
=
$1
;
shift
type
=
$1
;
shift
[[
$kind
=
(
stopped|all
)
]]
&&
args
=(
$args
-a
)
lines
=(
${
(f)
"
$(
_call_program commands docker
$docker_options
ps
--format
'table'
--no-trunc
$args
)
"
}
)
# Parse header line to find columns
local
i
=
1
j
=
1 k
header
=
${
lines
[1]
}
declare
-A
begin end
while
((
j <
${#
header
}
- 1
))
;
do
i
=
$((
j
+
${${
header
[
$j
,-1]
}
[(i)[^ ]]
}
-
1
))
j
=
$((
i
+
${${
header
[
$i
,-1]
}
[(i) ]
}
-
1
))
k
=
$((
j
+
${${
header
[
$j
,-1]
}
[(i)[^ ]]
}
-
2
))
begin[
${
header
[
$i
,
$((
j-1
))
]
}
]=
$i
end[
${
header
[
$i
,
$((
j-1
))
]
}
]=
$k
done
end[
${
header
[
$i
,
$((
j-1
))
]
}
]=
-1
# Last column, should go to the end of the line
lines
=(
${
lines
[2,-1]
}
)
# Container ID
if
[[
$type
=
(
ids|all
)
]]
;
then
for
line
in
$lines
;
do
s
=
"
${${
line
[
${
begin
[CONTAINER ID]
}
,
${
end
[CONTAINER ID]
}
]%% ##
}
[0,12]
}
"
s
=
"
$s
:
${
(l
:15::
:::
)
${${
line
[
${
begin
[CREATED]
}
,
${
end
[CREATED]
}
]/ ago/
}
%% ##
}}
"
s
=
"
$s
,
${${${
line
[
${
begin
[IMAGE]
}
,
${
end
[IMAGE]
}
]
}
/
:/
\\
:
}
%% ##
}
"
if
[[
${
line
[
${
begin
[STATUS]
}
,
${
end
[STATUS]
}
]
}
=
Exit
*
]]
;
then
stopped
=(
$stopped
$s
)
else
running
=(
$running
$s
)
fi
done
fi
# Names: we only display the one without slash. All other names
# are generated and may clutter the completion. However, with
# Swarm, all names may be prefixed by the swarm node name.
if
[[
$type
=
(
names|all
)
]]
;
then
for
line
in
$lines
;
do
names
=(
${
(ps
:,:
)
${${
line
[
${
begin
[NAMES]
}
,
${
end
[NAMES]
}
]
}
%% *
}}
)
# First step: find a common prefix and strip it (swarm node case)
((
${#${
(u)names%%/*
}}
==
1
))
&&
names
=
${
names
#
${
names
[1]%%/*
}
/
}
# Second step: only keep the first name without a /
s
=
${${
names
:#
*/*
}
[1]
}
# If no name, well give up.
((
$#s
!=
0
))
||
continue
s
=
"
$s
:
${
(l
:15::
:::
)
${${
line
[
${
begin
[CREATED]
}
,
${
end
[CREATED]
}
]/ ago/
}
%% ##
}}
"
s
=
"
$s
,
${${${
line
[
${
begin
[IMAGE]
}
,
${
end
[IMAGE]
}
]
}
/
:/
\\
:
}
%% ##
}
"
if
[[
${
line
[
${
begin
[STATUS]
}
,
${
end
[STATUS]
}
]
}
=
Exit
*
]]
;
then
stopped
=(
$stopped
$s
)
else
running
=(
$running
$s
)
fi
done
fi
[[
$kind
=
(
running|all
)
]]
&&
_describe
-t
containers-running
"running containers"
running
"
$@
"
&&
ret
=
0
[[
$kind
=
(
stopped|all
)
]]
&&
_describe
-t
containers-stopped
"stopped containers"
stopped
"
$@
"
&&
ret
=
0
return
ret
}
__docker_stoppedcontainers
()
{
[[
$PREFIX
=
-
*
]]
&&
return
1
__docker_get_containers stopped all
"
$@
"
}
__docker_runningcontainers
()
{
[[
$PREFIX
=
-
*
]]
&&
return
1
__docker_get_containers running all
"
$@
"
}
# ----- Helper functions
# Output a selectable list of all running docker containers
__docker_containers
()
{
__docker_containers
()
{
declare -a cont_cmd
[[
$PREFIX
=
-
*
]]
&&
return
1
cont_cmd=($(docker ps | awk 'NR>1{print $NF":[CON("$1")"$2"("$3")]"}'))
__docker_get_containers all all
"
$@
"
if [[ 'X$cont_cmd' != 'X' ]]
}
_describe 'containers' cont_cmd
__docker_containers_ids
()
{
[[
$PREFIX
=
-
*
]]
&&
return
1
__docker_get_containers all ids
"
$@
"
}
}
# Output a selectable list of all containers, even not running
__docker_containers_names
()
{
__docker_all_containers() {
[[
$PREFIX
=
-
*
]]
&&
return
1
declare -a cont_cmd
__docker_get_containers all names
"
$@
"
cont_cmd=($(docker ps -a | awk 'NR>1{print $NF":[CON("$1")"$2"("$3")]"}'))
}
if [[ 'X$cont_cmd' != 'X' ]]
_describe 'containers' cont_cmd
__docker_complete_info_plugins
()
{
[[
$PREFIX
=
-
*
]]
&&
return
1
integer
ret
=
1
emulate
-L
zsh
setopt extendedglob
local
-a
plugins
plugins
=(
${
(ps
:
:
)
${
(M)
${
(f)
${${
"
$(
_call_program commands docker
$docker_options
info
)
"
##*
$'
\n
'
Plugins
:
}
%%
$'
\n
'
^ *
}}
:#
$1
:
*
}
##
$1
:
}
)
_describe
-t
plugins
"
$1
plugins"
plugins
&&
ret
=
0
return
ret
}
}
# output a selectable list of all docker images
__docker_images
()
{
__docker_images
()
{
declare -a img_cmd
[[
$PREFIX
=
-
*
]]
&&
return
1
img_cmd=($(docker images | awk 'NR>1{print $1}'| sed 's/:/\\:/g'))
integer
ret
=
1
_describe 'images' img_cmd
declare
-a
images
}
images
=(
${${${
(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
# ----- Commands
__docker_repositories_with_tags
&&
ret
=
0
# Seperate function for each command, makes extension easier later
return
ret
# ---------------------------
}
__attach() {
_arguments \
__docker_repositories
()
{
'--no-stdin[Do not attach STDIN]' \
[[
$PREFIX
=
-
*
]]
&&
return
1
'--sig-proxy[Proxify all received signal to the process (even in non-tty mode)]'
declare
-a
repos
__docker_containers
repos
=(
${${${
(f)
"
$(
_call_program commands docker
$docker_options
images
)
"
}
%% *
}
[2,-1]
}
)
}
repos
=(
${
repos
#<none>
}
)
_describe
-t
docker-repos
"repositories"
repos
__build() {
}
_arguments \
'--no-cache[Do not use cache when building the image]' \
__docker_repositories_with_tags
()
{
'(-q,--quiet)'{-q,--quiet}'[Suppress the verbose output generated by the containers]' \
[[
$PREFIX
=
-
*
]]
&&
return
1
'--rm[Remove intermediate containers after a successful build]' \
integer
ret
=
1
'(-t,--tag=)'{-t,--tag=}'[Repository name (and optionally a tag) to be applied to the resulting image in case of success]' \
declare
-a
repos onlyrepos matched
'*:files:_files'
declare
m
}
repos
=(
${${${${
(f)
"
$(
_call_program commands docker
$docker_options
images
)
"
}
[2,-1]
}
/ ##/
:::
}
%% *
}
)
repos
=(
${${
repos
%
:::
<none>
}
#<none>
}
)
__commit() {
# Check if we have a prefix-match for the current prefix.
_arguments \
onlyrepos
=(
${
repos
%
::
*
}
)
'(-a,--author=)'{-a,--author=}'[Author (e.g. "John Hannibal Smith <hannibal@a-team.com>")]' \
for
m
in
$onlyrepos
;
do
'(-c,--change=)'{-c,--change=}'[Apply Dockerfile instruction to the created image]' \
[[
${
PREFIX
##
${
~~m
}}
!=
${
PREFIX
}
]]
&&
{
'(-m,--message=)'{-m,--message=}'[Commit message]' \
# Yes, complete with tags
'(-p,--pause=)'{-p,--pause=}'[Pause container during commit]' \
repos
=(
${${
repos
/
:::/:
}
/
:/
\\
:
}
)
}
_describe
-t
docker-repos-with-tags
"repositories with tags"
repos
&&
ret
=
0
return
ret
__cp() {
}
__docker_containers
done
}
# No, only complete repositories
onlyrepos
=(
${${
repos
%
:::
*
}
/
:/
\\
:
}
)
__create() {
_describe
-t
docker-repos
"repositories"
onlyrepos
-qS
:
&&
ret
=
0
_arguments \
'(-P,--publish-all=)'{-P,--publish-all=}'[Publish all exposed ports to the host interfaces]' \
return
ret
'(-a,--attach=)'{-a,--attach=}'[Attach to STDIN, STDOUT or STDERR]' \
}
'--add-host=[Add a custom host-to-IP mapping]' \
'--cap-add=[Add Linux capabilities]' \
__docker_search
()
{
'--cap-drop=[Drop Linux capabilities]' \
[[
$PREFIX
=
-
*
]]
&&
return
1
'--cpuset-cpus=[CPUs in which to allow execution (0-3, 0,1)]' \
local
cache_policy
'(-c,--cpu-shares=)'{-c,--cpu-shares=}'[CPU shares (relative weight)]' \
zstyle
-s
":completion:
${
curcontext
}
:"
cache-policy cache_policy
'--cidfile=[Write the container ID to the file]' \
if
[[
-z
"
$cache_policy
"
]]
;
then
'--device=[Add a host device to the container]' \
zstyle
":completion:
${
curcontext
}
:"
cache-policy __docker_caching_policy
'--dns=[Set custom dns servers]' \
fi
'--dns-search=[Set custom DNS search domains]' \
'(-e,--env=)'{-e,--env=}'[Set environment variables]' \
local
searchterm cachename
'--env-file=[Read in a file of environment variables]' \
searchterm
=
"
${
words
[
$CURRENT
]%/
}
"
'--entrypoint=[Overwrite the default entrypoint of the image]' \
cachename
=
_docker-search-
$searchterm
'--expose=[Expose a port from the container without publishing it to your host]' \
'(-h,--hostname=)'{-h,--hostname=}'[Container host name]' \
local
expl
'(-i,--interactive=)'{-i,--interactive=}'[Keep STDIN open even if not attached]' \
local
-a
result
'--ipc=[IPC namespace to use]' \
if
(
[[
${
(P)+cachename
}
-eq
0
]]
||
_cache_invalid
${
cachename
#_
}
)
\
'(-l,--label=)'{-l,--label=}'[Set meta data on a container]' \
&&
!
_retrieve_cache
${
cachename
#_
}
;
then
'--link=[Add link to another container (name:alias)]' \
_message
"Searching for
${
searchterm
}
..."
'--log-driver=[Logging driver for the container]' \
result
=(
${${${
(f)
"
$(
_call_program commands docker
$docker_options
search
$searchterm
)
"
}
%% *
}
[2,-1]
}
)
'--lxc-conf=[Add custom LXC options]' \
_store_cache
${
cachename
#_
}
result
'--mac-address=[Container MAC address (e.g. 92:d0:c6:0a:29:33)]' \
fi
'(-m,--memory=)'{-m,--memory=}'[Memory limit (format: <number><optional unit>, where unit = b, k, m or g)]' \
_wanted dockersearch expl
'available images'
compadd
-a
result
'--net=[Set the Network mode for the container]' \
}
'--name=[Assign a name to the container]' \
'--pid=[PID namespace to use]' \
__docker_get_log_options
()
{
'(-p,--publish=)'{-p,--publish=}'[Publish a container''s port to the host (format: ip:hostPort:containerPort/protocol)]' \
[[
$PREFIX
=
-
*
]]
&&
return
1
'--privileged=[Give extended privileges to this container]' \
'--restart=[Restart policy to apply when a container exits]' \
integer
ret
=
1
'--security-opt=[Security Options]' \
local
log_driver
=
${
opt_args
[--log-driver]
:-
"all"
}
'--sig-proxy=[Proxify all received signal to the process (even in non-tty mode)]' \
local
-a
awslogs_options fluentd_options gelf_options journald_options json_file_options syslog_options splunk_options
'(-t,--tty=)'{-t,--tty=}'[Allocate a pseudo-tty]' \
'(-u,--user=)'{-u,--user=}'[Username or UID]' \
awslogs_options
=(
"awslogs-region"
"awslogs-group"
"awslogs-stream"
)
'--ulimit=[Ulimit options]' \
fluentd_options
=(
"env"
"fluentd-address"
"fluentd-async-connect"
"fluentd-buffer-limit"
"fluentd-retry-wait"
"fluentd-max-retries"
"labels"
"tag"
)
'(-v,--volume=)'{-v,--volume=}'[Bind mount a volume (e.g. -v /host:/container or -v /container)]' \
gcplogs_options
=(
"env"
"gcp-log-cmd"
"gcp-project"
"labels"
)
'--volumes-from=[Mount volumes from the specified container(s)]' \
gelf_options
=(
"env"
"gelf-address"
"gelf-compression-level"
"gelf-compression-type"
"labels"
"tag"
)
'(-w,--workdir=)'{-w,--workdir=}'[Working directory inside the container]'
journald_options
=(
"env"
"labels"
"tag"
)
__docker_images
json_file_options
=(
"env"
"labels"
"max-file"
"max-size"
)
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"
)
splunk_options
=(
"env"
"labels"
"splunk-caname"
"splunk-capath"
"splunk-format"
"splunk-index"
"splunk-insecureskipverify"
"splunk-source"
"splunk-sourcetype"
"splunk-token"
"splunk-url"
"splunk-verify-connection"
"tag"
)
[[
$log_driver
=
(
awslogs|all
)
]]
&&
_describe
-t
awslogs-options
"awslogs options"
awslogs_options
"
$@
"
&&
ret
=
0
[[
$log_driver
=
(
fluentd|all
)
]]
&&
_describe
-t
fluentd-options
"fluentd options"
fluentd_options
"
$@
"
&&
ret
=
0
[[
$log_driver
=
(
gcplogs|all
)
]]
&&
_describe
-t
gcplogs-options
"gcplogs options"
gcplogs_options
"
$@
"
&&
ret
=
0
[[
$log_driver
=
(
gelf|all
)
]]
&&
_describe
-t
gelf-options
"gelf options"
gelf_options
"
$@
"
&&
ret
=
0
[[
$log_driver
=
(
journald|all
)
]]
&&
_describe
-t
journald-options
"journald options"
journald_options
"
$@
"
&&
ret
=
0
[[
$log_driver
=
(
json-file|all
)
]]
&&
_describe
-t
json-file-options
"json-file options"
json_file_options
"
$@
"
&&
ret
=
0
[[
$log_driver
=
(
syslog|all
)
]]
&&
_describe
-t
syslog-options
"syslog options"
syslog_options
"
$@
"
&&
ret
=
0
[[
$log_driver
=
(
splunk|all
)
]]
&&
_describe
-t
splunk-options
"splunk options"
splunk_options
"
$@
"
&&
ret
=
0
return
ret
}
__docker_log_drivers
()
{
[[
$PREFIX
=
-
*
]]
&&
return
1
integer
ret
=
1
drivers
=(
awslogs etwlogs fluentd gcplogs gelf journald json-file none splunk syslog
)
_describe
-t
log-drivers
"log drivers"
drivers
&&
ret
=
0
return
ret
}
__docker_log_options
()
{
[[
$PREFIX
=
-
*
]]
&&
return
1
integer
ret
=
1
if
compset
-P
'*='
;
then
case
"
${${
words
[-1]%=*
}
#*=
}
"
in
(
syslog-format
)
syslog_format_opts
=(
'rfc3164'
'rfc5424'
'rfc5424micro'
)
_describe
-t
syslog-format-opts
"Syslog format Options"
syslog_format_opts
&&
ret
=
0
;;
*
)
_message
'value'
&&
ret
=
0
;;
esac
else
__docker_get_log_options
-qS
"="
&&
ret
=
0
fi
return
ret
}
__docker_complete_detach_keys
()
{
[[
$PREFIX
=
-
*
]]
&&
return
1
integer
ret
=
1
compset
-P
"*,"
keys
=(
${:-
{a-z
}
})
ctrl_keys
=(
${:-
ctrl
-{{a-z
}
,
{
@,
'['
,
'\\'
,
'^'
,
']'
,_
}}})
_describe
-t
detach_keys
"[a-z]"
keys
-qS
","
&&
ret
=
0
_describe
-t
detach_keys-ctrl
"'ctrl-' + 'a-z @ [
\\\\
] ^ _'"
ctrl_keys
-qS
","
&&
ret
=
0
}
__docker_complete_pid
()
{
[[
$PREFIX
=
-
*
]]
&&
return
1
integer
ret
=
1
local
-a
opts vopts
opts
=(
'host'
)
vopts
=(
'container'
)
if
compset
-P
'*:'
;
then
case
"
${${
words
[-1]%
:
*
}
#*=
}
"
in
(
container
)
__docker_runningcontainers
&&
ret
=
0
;;
*
)
_message
'value'
&&
ret
=
0
;;
esac
else
_describe
-t
pid-value-opts
"PID Options with value"
vopts
-qS
":"
&&
ret
=
0
_describe
-t
pid-opts
"PID Options"
opts
&&
ret
=
0
fi
return
ret
}
__docker_complete_runtimes
()
{
[[
$PREFIX
=
-
*
]]
&&
return
1
integer
ret
=
1
emulate
-L
zsh
setopt extendedglob
local
-a
runtimes_opts
runtimes_opts
=(
${
(ps
:
:
)
${
(f)
${${
"
$(
_call_program commands docker
$docker_options
info
)
"
##*
$'
\n
'
Runtimes
:
}
%%
$'
\n
'
^ *
}}}
)
_describe
-t
runtimes-opts
"runtimes options"
runtimes_opts
&&
ret
=
0
}
__docker_complete_ps_filters
()
{
[[
$PREFIX
=
-
*
]]
&&
return
1
integer
ret
=
1
if
compset
-P
'*='
;
then
case
"
${${
words
[-1]%=*
}
#*=
}
"
in
(
ancestor
)
__docker_images
&&
ret
=
0
;;
(
before|since
)
__docker_containers
&&
ret
=
0
;;
(
id
)
__docker_containers_ids
&&
ret
=
0
;;
(
name
)
__docker_containers_names
&&
ret
=
0
;;
(
network
)
__docker_networks
&&
ret
=
0
;;
(
status
)
status_opts
=(
'created'
'dead'
'exited'
'paused'
'restarting'
'running'
'removing'
)
_describe
-t
status-filter-opts
"Status Filter Options"
status_opts
&&
ret
=
0
;;
(
volume
)
__docker_volumes
&&
ret
=
0
;;
*
)
_message
'value'
&&
ret
=
0
;;
esac
else
opts
=(
'ancestor'
'before'
'exited'
'id'
'label'
'name'
'network'
'since'
'status'
'volume'
)
_describe
-t
filter-opts
"Filter Options"
opts
-qS
"="
&&
ret
=
0
fi
return
ret
}
__docker_complete_search_filters
()
{
[[
$PREFIX
=
-
*
]]
&&
return
1
integer
ret
=
1
declare
-a
boolean_opts opts
boolean_opts
=(
'true'
'false'
)
opts
=(
'is-automated'
'is-official'
'stars'
)
if
compset
-P
'*='
;
then
case
"
${${
words
[-1]%=*
}
#*=
}
"
in
(
is-automated|is-official
)
_describe
-t
boolean-filter-opts
"filter options"
boolean_opts
&&
ret
=
0
;;
*
)
_message
'value'
&&
ret
=
0
;;
esac
else
_describe
-t
filter-opts
"filter options"
opts
-qS
"="
&&
ret
=
0
fi
return
ret
}
}
__diff() {
__docker_complete_images_filters
()
{
__docker_containers
[[
$PREFIX
=
-
*
]]
&&
return
1
integer
ret
=
1
declare
-a
boolean_opts opts
boolean_opts
=(
'true'
'false'
)
opts
=(
'before'
'dangling'
'label'
'since'
)
if
compset
-P
'*='
;
then
case
"
${${
words
[-1]%=*
}
#*=
}
"
in
(
before|since
)
__docker_images
&&
ret
=
0
;;
(
dangling
)
_describe
-t
boolean-filter-opts
"filter options"
boolean_opts
&&
ret
=
0
;;
*
)
_message
'value'
&&
ret
=
0
;;
esac
else
_describe
-t
filter-opts
"Filter Options"
opts
-qS
"="
&&
ret
=
0
fi
return
ret
}
}
__events() {
__docker_complete_events_filter
()
{
_arguments \
[[
$PREFIX
=
-
*
]]
&&
return
1
'--since=[Show previously created events and then stream.]'
integer
ret
=
1
declare
-a
opts
opts
=(
'container'
'daemon'
'event'
'image'
'label'
'network'
'type'
'volume'
)
if
compset
-P
'*='
;
then
case
"
${${
words
[-1]%=*
}
#*=
}
"
in
(
container
)
__docker_containers
&&
ret
=
0
;;
(
daemon
)
emulate
-L
zsh
setopt extendedglob
local
-a
daemon_opts
daemon_opts
=(
${
(f)
${${
"
$(
_call_program commands docker
$docker_options
info
)
"
##*
$'
\n
'
Name
:
}
%%
$'
\n
'
^ *
}}
${${
(f)
${${
"
$(
_call_program commands docker
$docker_options
info
)
"
##*
$'
\n
'
ID
:
}
%%
$'
\n
'
^ *
}}
//
:/
\\
:
}
)
_describe
-t
daemon-filter-opts
"daemon filter options"
daemon_opts
&&
ret
=
0
;;
(
event
)
local
-a
event_opts
event_opts
=(
'attach'
'commit'
'connect'
'copy'
'create'
'delete'
'destroy'
'detach'
'die'
'disconnect'
'exec_create'
'exec_detach'
'exec_start'
'export'
'import'
'kill'
'load'
'mount'
'oom'
'pause'
'pull'
'push'
'reload'
'rename'
'resize'
'restart'
'save'
'start'
'stop'
'tag'
'top'
'unmount'
'unpause'
'untag'
'update'
)
_describe
-t
event-filter-opts
"event filter options"
event_opts
&&
ret
=
0
;;
(
image
)
__docker_images
&&
ret
=
0
;;
(
network
)
__docker_networks
&&
ret
=
0
;;
(
type
)
local
-a
type_opts
type_opts
=(
'container'
'daemon'
'image'
'network'
'volume'
)
_describe
-t
type-filter-opts
"type filter options"
type_opts
&&
ret
=
0
;;
(
volume
)
__docker_volumes
&&
ret
=
0
;;
*
)
_message
'value'
&&
ret
=
0
;;
esac
else
_describe
-t
filter-opts
"filter options"
opts
-qS
"="
&&
ret
=
0
fi
return
ret
}
}
__export() {
# BO network
__docker_containers
__docker_network_complete_ls_filters
()
{
[[
$PREFIX
=
-
*
]]
&&
return
1
integer
ret
=
1
if
compset
-P
'*='
;
then
case
"
${${
words
[-1]%=*
}
#*=
}
"
in
(
driver
)
__docker_complete_info_plugins Network
&&
ret
=
0
;;
(
id
)
__docker_networks_ids
&&
ret
=
0
;;
(
name
)
__docker_networks_names
&&
ret
=
0
;;
(
type
)
type_opts
=(
'builtin'
'custom'
)
_describe
-t
type-filter-opts
"Type Filter Options"
type_opts
&&
ret
=
0
;;
*
)
_message
'value'
&&
ret
=
0
;;
esac
else
opts
=(
'driver'
'id'
'label'
'name'
'type'
)
_describe
-t
filter-opts
"Filter Options"
opts
-qS
"="
&&
ret
=
0
fi
return
ret
}
}
__history() {
__docker_get_networks
()
{
_arguments \
[[
$PREFIX
=
-
*
]]
&&
return
1
'--no-trunc=[Don''t truncate output]' \
integer
ret
=
1
'(-q,--quiet)'{-q,--quiet}'[Only show numeric IDs]'
local
line s
__docker_images
declare
-a
lines networks
type
=
$1
;
shift
lines
=(
${
(f)
"
$(
_call_program commands docker
$docker_options
network
ls
)
"
}
)
# Parse header line to find columns
local
i
=
1
j
=
1 k
header
=
${
lines
[1]
}
declare
-A
begin end
while
((
j <
${#
header
}
- 1
))
;
do
i
=
$((
j
+
${${
header
[
$j
,-1]
}
[(i)[^ ]]
}
-
1
))
j
=
$((
i
+
${${
header
[
$i
,-1]
}
[(i) ]
}
-
1
))
k
=
$((
j
+
${${
header
[
$j
,-1]
}
[(i)[^ ]]
}
-
2
))
begin[
${
header
[
$i
,
$((
j-1
))
]
}
]=
$i
end[
${
header
[
$i
,
$((
j-1
))
]
}
]=
$k
done
end[
${
header
[
$i
,
$((
j-1
))
]
}
]=
-1
lines
=(
${
lines
[2,-1]
}
)
# Network ID
if
[[
$type
=
(
ids|all
)
]]
;
then
for
line
in
$lines
;
do
s
=
"
${
line
[
${
begin
[NETWORK ID]
}
,
${
end
[NETWORK ID]
}
]%% ##
}
"
s
=
"
$s
:
${
(l
:7::
:::
)
${${
line
[
${
begin
[DRIVER]
}
,
${
end
[DRIVER]
}
]
}
%% ##
}}
"
networks
=(
$networks
$s
)
done
fi
# Names
if
[[
$type
=
(
names|all
)
]]
;
then
for
line
in
$lines
;
do
s
=
"
${
line
[
${
begin
[NAME]
}
,
${
end
[NAME]
}
]%% ##
}
"
s
=
"
$s
:
${
(l
:7::
:::
)
${${
line
[
${
begin
[DRIVER]
}
,
${
end
[DRIVER]
}
]
}
%% ##
}}
"
networks
=(
$networks
$s
)
done
fi
_describe
-t
networks-list
"networks"
networks
"
$@
"
&&
ret
=
0
return
ret
}
}
__images() {
__docker_networks
()
{
_arguments \
[[
$PREFIX
=
-
*
]]
&&
return
1
'(-a,--all)'{-a,--all}'[Show all images (by default filter out the intermediate images used to build)]' \
__docker_get_networks all
"
$@
"
'--no-trunc[Don''t truncate output]' \
'(-q,--quiet=)'{-q,--quiet=}'[Only show numeric IDs]' \
'(-t,--tree=)'{-t,--tree=}'[Output graph in tree format]' \
'(-v,--viz=)'{-v,--viz=}'[Output graph in graphviz format]'
__docker_images
}
}
__import() {
__docker_networks_ids
()
{
_arguments '*:files:_files'
[[
$PREFIX
=
-
*
]]
&&
return
1
__docker_get_networks ids
"
$@
"
}
}
__info() {
__docker_networks_names
()
{
# no arguments
[[
$PREFIX
=
-
*
]]
&&
return
1
}
__docker_get_networks names
"
$@
"
__inspect() {
__docker_images
__docker_all_containers
}
__kill() {
_arguments \
'(-s,--signal=)'{-s,--signal=}'[KILL Signal]'
__docker_containers
}
__load() {
_arguments '*:files:_files'
}
__login() {
_arguments \
'(-e,--email=)'{-e,-email=}'[Email]' \
'(-p,--password=)'{-p,-password=}'[Password]' \
'(-u,--username=)'{-u,-username=}'[Username]'
}
__logs() {
_arguments \
'(-f,--follow)'{-f,-follow}'[Follow log output]'
__docker_containers
}
__port() {
__docker_containers
}
__top() {
__docker_containers
}
__ps() {
_arguments \
'(-a,--all)'{-a,--all}'[Show all containers. Only running containers are shown by default.]' \
'--before-id=[Show only container created before Id, include non-running ones.]' \
'(-l,--latest)'{-l,--latest}'[Show only the latest created container, include non-running ones.]' \
'-n=[Show n last created containers, include non-running ones. default=-1.]' \
'--no-trunc[Don''t truncate output]' \
'(-q,--quiet)'{-q,--quiet}'[Only display numeric IDs]' \
'(-s,--size)'{-s,--size}'[Display sizes]' \
'--since-id=[Show only containers created since Id, include non-running ones.]'
}
}
__pull() {
__docker_network_commands
()
{
_arguments \
local
-a
_docker_network_subcommands
'(-t,--tag=)'{-t,--tag=}'[Download tagged image in repository]'
_docker_network_subcommands
=(
"connect:Connect a container to a network"
"create:Creates a new network with a name specified by the user"
"disconnect:Disconnects a container from a network"
"inspect:Displays detailed information on a network"
"ls:Lists all the networks created by the user"
"rm:Deletes one or more networks"
)
_describe
-t
docker-network-commands
"docker network command"
_docker_network_subcommands
}
}
__push() {
__docker_network_subcommand
()
{
# no arguments
local
-a
_command_args opts_help
local
expl
help
=
"--help"
integer
ret
=
1
opts_help
=(
"(: -)--help[Print usage]"
)
case
"
$words
[1]"
in
(
connect
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
)*--alias=[Add network-scoped alias for the container]:alias: "
\
"(
$help
)--ip=[Container IPv4 address]:IPv4: "
\
"(
$help
)--ip6=[Container IPv6 address]:IPv6: "
\
"(
$help
)*--link=[Add a link to another container]:link:->link"
\
"(
$help
)*--link-local-ip=[Add a link-local address for the container]:IPv4/IPv6: "
\
"(
$help
-)1:network:__docker_networks"
\
"(
$help
-)2:containers:__docker_containers"
&&
ret
=
0
case
$state
in
(
link
)
if
compset
-P
"*:"
;
then
_wanted
alias
expl
"Alias"
compadd
-E
""
&&
ret
=
0
else
__docker_runningcontainers
-qS
":"
&&
ret
=
0
fi
;;
esac
;;
(
create
)
_arguments
$(
__docker_arguments
)
-A
'-*'
\
$opts_help
\
"(
$help
)*--aux-address[Auxiliary IPv4 or IPv6 addresses used by network driver]:key=IP: "
\
"(
$help
-d --driver)"
{
-d
=
,--driver
=}
"[Driver to manage the Network]:driver:(null host bridge overlay)"
\
"(
$help
)*--gateway=[IPv4 or IPv6 Gateway for the master subnet]:IP: "
\
"(
$help
)--internal[Restricts external access to the network]"
\
"(
$help
)*--ip-range=[Allocate container ip from a sub-range]:IP/mask: "
\
"(
$help
)--ipam-driver=[IP Address Management Driver]:driver:(default)"
\
"(
$help
)*--ipam-opt=[Custom IPAM plugin options]:opt=value: "
\
"(
$help
)--ipv6[Enable IPv6 networking]"
\
"(
$help
)*--label=[Set metadata on a network]:label=value: "
\
"(
$help
)*"
{
-o
=
,--opt
=}
"[Driver specific options]:opt=value: "
\
"(
$help
)*--subnet=[Subnet in CIDR format that represents a network segment]:IP/mask: "
\
"(
$help
-)1:Network Name: "
&&
ret
=
0
;;
(
disconnect
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-)1:network:__docker_networks"
\
"(
$help
-)2:containers:__docker_containers"
&&
ret
=
0
;;
(
inspect
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-f --format)"
{
-f
=
,--format
=}
"[Format the output using the given go template]:template: "
\
"(
$help
-)*:network:__docker_networks"
&&
ret
=
0
;;
(
ls
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
)--no-trunc[Do not truncate the output]"
\
"(
$help
)*"
{
-f
=
,--filter
=}
"[Provide filter values]:filter:->filter-options"
\
"(
$help
)--format=[Pretty-print networks using a Go template]:template: "
\
"(
$help
-q --quiet)"
{
-q
,--quiet
}
"[Only display numeric IDs]"
&&
ret
=
0
case
$state
in
(
filter-options
)
__docker_network_complete_ls_filters
&&
ret
=
0
;;
esac
;;
(
rm
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-)*:network:__docker_networks"
&&
ret
=
0
;;
(
help
)
_arguments
$(
__docker_arguments
)
":subcommand:__docker_network_commands"
&&
ret
=
0
;;
esac
return
ret
}
}
__restart() {
# EO network
_arguments \
'(-t,--time=)'{-t,--time=}'[Number of seconds to try to stop for before killing the container. Once killed it will then be restarted. Default=10]'
# BO node
__docker_containers
__docker_node_complete_ls_filters
()
{
[[
$PREFIX
=
-
*
]]
&&
return
1
integer
ret
=
1
if
compset
-P
'*='
;
then
case
"
${${
words
[-1]%=*
}
#*=
}
"
in
(
id
)
__docker_complete_nodes_ids
&&
ret
=
0
;;
(
membership
)
membership_opts
=(
'accepted'
'pending'
'rejected'
)
_describe
-t
membership-opts
"membership options"
membership_opts
&&
ret
=
0
;;
(
name
)
__docker_complete_nodes_names
&&
ret
=
0
;;
(
role
)
role_opts
=(
'manager'
'worker'
)
_describe
-t
role-opts
"role options"
role_opts
&&
ret
=
0
;;
*
)
_message
'value'
&&
ret
=
0
;;
esac
else
opts
=(
'id'
'label'
'membership'
'name'
'role'
)
_describe
-t
filter-opts
"filter options"
opts
-qS
"="
&&
ret
=
0
fi
return
ret
}
}
__rm() {
__docker_node_complete_ps_filters
()
{
_arguments \
[[
$PREFIX
=
-
*
]]
&&
return
1
'(-f,--force=)'{-f,--force=}'[Force removal of running container]' \
integer
ret
=
1
'(-l,--link=)'{-l,--link=}'[Remove the specified link and not the underlying container]' \
'(-v,--volumes=)'{-v,--volumes=}'[Remove the volumes associated to the container]'
if
compset
-P
'*='
;
then
__docker_all_containers
case
"
${${
words
[-1]%=*
}
#*=
}
"
in
(
desired-state
)
state_opts
=(
'accepted'
'running'
)
_describe
-t
state-opts
"desired state options"
state_opts
&&
ret
=
0
;;
*
)
_message
'value'
&&
ret
=
0
;;
esac
else
opts
=(
'desired-state'
'id'
'label'
'name'
)
_describe
-t
filter-opts
"filter options"
opts
-qS
"="
&&
ret
=
0
fi
return
ret
}
}
__rmi() {
__docker_nodes
()
{
_arguments \
[[
$PREFIX
=
-
*
]]
&&
return
1
'(-f,--force=)'{-f,--force=}'[Force]'
integer
ret
=
1
__docker_images
local
line s
declare
-a
lines nodes args
type
=
$1
;
shift
filter
=
$1
;
shift
[[
$filter
!=
"none"
]]
&&
args
=(
"-f
$filter
"
)
lines
=(
${
(f)
"
$(
_call_program commands docker
$docker_options
node
ls
$args
)
"
}
)
# Parse header line to find columns
local
i
=
1
j
=
1 k
header
=
${
lines
[1]
}
declare
-A
begin end
while
((
j <
${#
header
}
- 1
))
;
do
i
=
$((
j
+
${${
header
[
$j
,-1]
}
[(i)[^ ]]
}
-
1
))
j
=
$((
i
+
${${
header
[
$i
,-1]
}
[(i) ]
}
-
1
))
k
=
$((
j
+
${${
header
[
$j
,-1]
}
[(i)[^ ]]
}
-
2
))
begin[
${
header
[
$i
,
$((
j-1
))
]
}
]=
$i
end[
${
header
[
$i
,
$((
j-1
))
]
}
]=
$k
done
end[
${
header
[
$i
,
$((
j-1
))
]
}
]=
-1
lines
=(
${
lines
[2,-1]
}
)
# Node ID
if
[[
$type
=
(
ids|all
)
]]
;
then
for
line
in
$lines
;
do
s
=
"
${
line
[
${
begin
[ID]
}
,
${
end
[ID]
}
]%% ##
}
"
nodes
=(
$nodes
$s
)
done
fi
# Names
if
[[
$type
=
(
names|all
)
]]
;
then
for
line
in
$lines
;
do
s
=
"
${
line
[
${
begin
[NAME]
}
,
${
end
[NAME]
}
]%% ##
}
"
nodes
=(
$nodes
$s
)
done
fi
_describe
-t
nodes-list
"nodes"
nodes
"
$@
"
&&
ret
=
0
return
ret
}
__docker_complete_nodes
()
{
[[
$PREFIX
=
-
*
]]
&&
return
1
__docker_nodes all none
"
$@
"
}
__docker_complete_nodes_ids
()
{
[[
$PREFIX
=
-
*
]]
&&
return
1
__docker_nodes ids none
"
$@
"
}
__docker_complete_nodes_names
()
{
[[
$PREFIX
=
-
*
]]
&&
return
1
__docker_nodes names none
"
$@
"
}
__docker_complete_pending_nodes
()
{
[[
$PREFIX
=
-
*
]]
&&
return
1
__docker_nodes all
"membership=pending"
"
$@
"
}
__docker_complete_manager_nodes
()
{
[[
$PREFIX
=
-
*
]]
&&
return
1
__docker_nodes all
"role=manager"
"
$@
"
}
}
__run() {
__docker_complete_worker_nodes
()
{
_arguments \
[[
$PREFIX
=
-
*
]]
&&
return
1
'(-P,--publish-all=)'{-P,--publish-all=}'[Publish all exposed ports to the host interfaces]' \
__docker_nodes all
"role=worker"
"
$@
"
'(-a,--attach=)'{-a,--attach=}'[Attach to STDIN, STDOUT or STDERR]' \
}
'--add-host=[Add a custom host-to-IP mapping]' \
'--cap-add=[Add Linux capabilities]' \
__docker_node_commands
()
{
'--cap-drop=[Drop Linux capabilities]' \
local
-a
_docker_node_subcommands
'--cpuset-cpus=[CPUs in which to allow execution (0-3, 0,1)]' \
_docker_node_subcommands
=(
'(-c,--cpu-shares=)'{-c,--cpu-shares=}'[CPU shares (relative weight)]' \
"demote:Demote a node as manager in the swarm"
'--cidfile=[Write the container ID to the file]' \
"inspect:Display detailed information on one or more nodes"
'(-d,--detach=)'{-d,--detach=}'[Run container in the background, print new container id]' \
"ls:List nodes in the swarm"
'--device=[Add a host device to the container]' \
"promote:Promote a node as manager in the swarm"
'--dns=[Set custom dns servers]' \
"rm:Remove one or more nodes from the swarm"
'--dns-search=[Set custom DNS search domains]' \
"ps:List tasks running on a node"
'(-e,--env=)'{-e,--env=}'[Set environment variables]' \
"update:Update a node"
'--env-file=[Read in a file of environment variables]' \
)
'--entrypoint=[Overwrite the default entrypoint of the image]' \
_describe
-t
docker-node-commands
"docker node command"
_docker_node_subcommands
'--expose=[Expose a port from the container without publishing it to your host]' \
}
'(-h,--hostname=)'{-h,--hostname=}'[Container host name]' \
'(-i,--interactive=)'{-i,--interactive=}'[Keep STDIN open even if not attached]' \
__docker_node_subcommand
()
{
'--ipc=[IPC namespace to use]' \
local
-a
_command_args opts_help
'(-l,--label=)'{-l,--label=}'[Set meta data on a container]' \
local
expl
help
=
"--help"
'--link=[Add link to another container (name:alias)]' \
integer
ret
=
1
'--log-driver=[Logging driver for the container]' \
'--lxc-conf=[Add custom LXC options]' \
opts_help
=(
"(: -)--help[Print usage]"
)
'--mac-address=[Container MAC address (e.g. 92:d0:c6:0a:29:33)]' \
'(-m,--memory=)'{-m,--memory=}'[Memory limit (format: <number><optional unit>, where unit = b, k, m or g)]' \
case
"
$words
[1]"
in
'--net=[Set the Network mode for the container]' \
(
rm
|
remove
)
'--name=[Assign a name to the container]' \
_arguments
$(
__docker_arguments
)
\
'--pid=[PID namespace to use]' \
$opts_help
\
'(-p,--publish=)'{-p,--publish=}'[Publish a container''s port to the host (format: ip:hostPort:containerPort/protocol)]' \
"(
$help
)--force[Force remove an active node]"
\
'--privileged=[Give extended privileges to this container]' \
"(
$help
-)*:node:__docker_complete_pending_nodes"
&&
ret
=
0
'--restart=[Restart policy to apply when a container exits]' \
;;
'--rm=[Automatically remove the container when it exits (incompatible with -d)]' \
(
demote
)
'--security-opt=[Security Options]' \
_arguments
$(
__docker_arguments
)
\
'--sig-proxy=[Proxify all received signal to the process (even in non-tty mode)]' \
$opts_help
\
'(-t,--tty=)'{-t,--tty=}'[Allocate a pseudo-tty]' \
"(
$help
-)*:node:__docker_complete_manager_nodes"
&&
ret
=
0
'(-u,--user=)'{-u,--user=}'[Username or UID]' \
;;
'--ulimit=[Ulimit options]' \
(
inspect
)
'(-v,--volume=)'{-v,--volume=}'[Bind mount a volume (e.g. -v /host:/container or -v /container)]' \
_arguments
$(
__docker_arguments
)
\
'--volumes-from=[Mount volumes from the specified container(s)]' \
$opts_help
\
'(-w,--workdir=)'{-w,--workdir=}'[Working directory inside the container]'
"(
$help
-f --format)"
{
-f
=
,--format
=}
"[Format the output using the given go template]:template: "
\
__docker_images
"(
$help
)--pretty[Print the information in a human friendly format]"
\
}
"(
$help
-)*:node:__docker_complete_nodes"
&&
ret
=
0
;;
__search() {
(
ls
|
list
)
_arguments \
_arguments
$(
__docker_arguments
)
\
'--no-trunc=[Don''t truncate output]' \
$opts_help
\
'-s,--stars=)'{-s,--stars=}'[Only displays with at least xxx stars]' \
"(
$help
)*"
{
-f
=
,--filter
=}
"[Provide filter values]:filter:->filter-options"
\
'-t,--trusted=)'{-t,--trusted=}'[Only show trusted builds]'
"(
$help
-q --quiet)"
{
-q
,--quiet
}
"[Only display IDs]"
&&
ret
=
0
}
case
$state
in
(
filter-options
)
__save() {
__docker_node_complete_ls_filters
&&
ret
=
0
__docker_images
;;
}
esac
;;
__start() {
(
promote
)
_arguments \
_arguments
$(
__docker_arguments
)
\
'(-a,--attach=)'{-a,--attach=}'[Attach container''s STDOUT/STDERR and forward all signals to the process]' \
$opts_help
\
'(-i,--interactive=)'{-i,--interactive=}'[Attach container''s STDIN]'
"(
$help
-)*:node:__docker_complete_worker_nodes"
&&
ret
=
0
__docker_all_containers
;;
}
(
ps
)
_arguments
$(
__docker_arguments
)
\
__stats() {
$opts_help
\
__docker_containers
"(
$help
-a --all)"
{
-a
,--all
}
"[Display all instances]"
\
}
"(
$help
)*"
{
-f
=
,--filter
=}
"[Provide filter values]:filter:->filter-options"
\
"(
$help
)--no-resolve[Do not map IDs to Names]"
\
__stop() {
"(
$help
)--no-trunc[Do not truncate output]"
\
_arguments \
"(
$help
-)1:node:__docker_complete_nodes"
&&
ret
=
0
'(-t,--time=)'{-t,--time=}'[Number of seconds to wait for the container to stop before killing it.]'
case
$state
in
__docker_containers
(
filter-options
)
}
__docker_node_complete_ps_filters
&&
ret
=
0
;;
__tag() {
esac
_arguments \
;;
'(-f,--force=)'{-f,--force=}'[Force]'
(
update
)
__docker_images
_arguments
$(
__docker_arguments
)
\
}
$opts_help
\
"(
$help
)--availability=[Availability of the node]:availability:(active pause drain)"
\
__version() {
"(
$help
)*--label-add=[Add or update a node label]:key=value: "
\
# no arguments
"(
$help
)*--label-rm=[Remove a node label if exists]:label: "
\
}
"(
$help
)--role=[Role of the node]:role:(manager worker)"
\
"(
$help
-)1:node:__docker_complete_nodes"
&&
ret
=
0
__wait() {
;;
__docker_containers
(
help
)
}
_arguments
$(
__docker_arguments
)
":subcommand:__docker_node_commands"
&&
ret
=
0
;;
__exec() {
esac
_arguments \
'(-d,--detach=)'{-d,--detach=}'[Detached mode: run command in the background]' \
return
ret
'(-i,--interactive=)'{-i,--interactive=}'[Keep STDIN open even if not attached]' \
}
'(-t,--tty=)'{-t,--tty=}'[Allocate a pseudo-TTY]'
__docker_containers
# EO node
}
# BO plugin
# end commands ---------
# ----------------------
__docker_complete_plugins
()
{
[[
$PREFIX
=
-
*
]]
&&
return
1
local -a _1st_arguments
integer
ret
=
1
_1st_arguments=(
local
line s
"attach":"Attach to a running container"
declare
-a
lines plugins
"build":"Build a container from a Dockerfile"
"commit":"Create a new image from a container's changes"
lines
=(
${
(f)
"
$(
_call_program commands docker
$docker_options
plugin
ls
)
"
}
)
"cp":"Copy files/folders from the containers filesystem to the host path"
"create":"Create new container without running it"
# Parse header line to find columns
"diff":"Inspect changes on a container's filesystem"
local
i
=
1
j
=
1 k
header
=
${
lines
[1]
}
"events":"Get real time events from the server"
declare
-A
begin end
"export":"Stream the contents of a container as a tar archive"
while
((
j <
${#
header
}
- 1
))
;
do
"history":"Show the history of an image"
i
=
$((
j
+
${${
header
[
$j
,-1]
}
[(i)[^ ]]
}
-
1
))
"images":"List images"
j
=
$((
i
+
${${
header
[
$i
,-1]
}
[(i) ]
}
-
1
))
"import":"Create a new filesystem image from the contents of a tarball"
k
=
$((
j
+
${${
header
[
$j
,-1]
}
[(i)[^ ]]
}
-
2
))
"info":"Display system-wide information"
begin[
${
header
[
$i
,
$((
j-1
))
]
}
]=
$i
"inspect":"Return low-level information on a container"
end[
${
header
[
$i
,
$((
j-1
))
]
}
]=
$k
"kill":"Kill a running container"
done
"load":"Load an image from a tar archive"
end[
${
header
[
$i
,
$((
j-1
))
]
}
]=
-1
"login":"Register or Login to the docker registry server"
lines
=(
${
lines
[2,-1]
}
)
"logs":"Fetch the logs of a container"
"port":"Lookup the public-facing port which is NAT-ed to PRIVATE_PORT"
# Name
"ps":"List containers"
for
line
in
$lines
;
do
"pull":"Pull an image or a repository from the docker registry server"
s
=
"
${
line
[
${
begin
[NAME]
}
,
${
end
[NAME]
}
]%% ##
}
"
"push":"Push an image or a repository to the docker registry server"
s
=
"
$s
:
${
(l
:7::
:::
)
${${
line
[
${
begin
[TAG]
}
,
${
end
[TAG]
}
]
}
%% ##
}}
"
"restart":"Restart a running container"
plugins
=(
$plugins
$s
)
"rm":"Remove one or more containers"
done
"rmi":"Remove one or more images"
"run":"Run a command in a new container"
_describe
-t
plugins-list
"plugins"
plugins
"
$@
"
&&
ret
=
0
"save":"Save an image to a tar archive"
return
ret
"search":"Search for an image in the docker index"
}
"start":"Start a stopped container"
"stats":"Display a live stream of one or more containers' resource usage statistics"
__docker_plugin_commands
()
{
"stop":"Stop a running container"
local
-a
_docker_plugin_subcommands
"tag":"Tag an image into a repository"
_docker_plugin_subcommands
=(
"top":"Lookup the running processes of a container"
"disable:Disable a plugin"
"version":"Show the docker version information"
"enable:Enable a plugin"
"wait":"Block until a container stops, then print its exit code"
"inspect:Return low-level information about a plugin"
"exec":"Run a task inside a running container"
"install:Install a plugin"
)
"ls:List plugins"
"push:Push a plugin"
_arguments '*:: :->command'
"rm:Remove a plugin"
"set:Change settings for a plugin"
if (( CURRENT == 1 )); then
)
_describe -t commands "docker command" _1st_arguments
_describe
-t
docker-plugin-commands
"docker plugin command"
_docker_plugin_subcommands
}
__docker_plugin_subcommand
()
{
local
-a
_command_args opts_help
local
expl
help
=
"--help"
integer
ret
=
1
opts_help
=(
"(: -)--help[Print usage]"
)
case
"
$words
[1]"
in
(
disable|enable|inspect|install|ls|push|rm
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-)1:plugin:__docker_complete_plugins"
&&
ret
=
0
;;
(
set
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-)1:plugin:__docker_complete_plugins"
\
"(
$help
-)*:key=value: "
&&
ret
=
0
;;
(
help
)
_arguments
$(
__docker_arguments
)
":subcommand:__docker_plugin_commands"
&&
ret
=
0
;;
esac
return
ret
}
# EO plugin
# BO service
__docker_service_complete_ls_filters
()
{
[[
$PREFIX
=
-
*
]]
&&
return
1
integer
ret
=
1
if
compset
-P
'*='
;
then
case
"
${${
words
[-1]%=*
}
#*=
}
"
in
(
id
)
__docker_complete_services_ids
&&
ret
=
0
;;
(
name
)
__docker_complete_services_names
&&
ret
=
0
;;
*
)
_message
'value'
&&
ret
=
0
;;
esac
else
opts
=(
'id'
'label'
'name'
)
_describe
-t
filter-opts
"filter options"
opts
-qS
"="
&&
ret
=
0
fi
return
ret
}
__docker_service_complete_ps_filters
()
{
[[
$PREFIX
=
-
*
]]
&&
return
1
integer
ret
=
1
if
compset
-P
'*='
;
then
case
"
${${
words
[-1]%=*
}
#*=
}
"
in
(
desired-state
)
state_opts
=(
'accepted'
'running'
)
_describe
-t
state-opts
"desired state options"
state_opts
&&
ret
=
0
;;
*
)
_message
'value'
&&
ret
=
0
;;
esac
else
opts
=(
'desired-state'
'id'
'label'
'name'
)
_describe
-t
filter-opts
"filter options"
opts
-qS
"="
&&
ret
=
0
fi
return
ret
}
__docker_services
()
{
[[
$PREFIX
=
-
*
]]
&&
return
1
integer
ret
=
1
local
line s
declare
-a
lines services
type
=
$1
;
shift
lines
=(
${
(f)
"
$(
_call_program commands docker
$docker_options
service
ls
)
"
}
)
# Parse header line to find columns
local
i
=
1
j
=
1 k
header
=
${
lines
[1]
}
declare
-A
begin end
while
((
j <
${#
header
}
- 1
))
;
do
i
=
$((
j
+
${${
header
[
$j
,-1]
}
[(i)[^ ]]
}
-
1
))
j
=
$((
i
+
${${
header
[
$i
,-1]
}
[(i) ]
}
-
1
))
k
=
$((
j
+
${${
header
[
$j
,-1]
}
[(i)[^ ]]
}
-
2
))
begin[
${
header
[
$i
,
$((
j-1
))
]
}
]=
$i
end[
${
header
[
$i
,
$((
j-1
))
]
}
]=
$k
done
end[
${
header
[
$i
,
$((
j-1
))
]
}
]=
-1
lines
=(
${
lines
[2,-1]
}
)
# Service ID
if
[[
$type
=
(
ids|all
)
]]
;
then
for
line
in
$lines
;
do
s
=
"
${
line
[
${
begin
[ID]
}
,
${
end
[ID]
}
]%% ##
}
"
s
=
"
$s
:
${
(l
:7::
:::
)
${${
line
[
${
begin
[IMAGE]
}
,
${
end
[IMAGE]
}
]
}
%% ##
}}
"
services
=(
$services
$s
)
done
fi
# Names
if
[[
$type
=
(
names|all
)
]]
;
then
for
line
in
$lines
;
do
s
=
"
${
line
[
${
begin
[NAME]
}
,
${
end
[NAME]
}
]%% ##
}
"
s
=
"
$s
:
${
(l
:7::
:::
)
${${
line
[
${
begin
[IMAGE]
}
,
${
end
[IMAGE]
}
]
}
%% ##
}}
"
services
=(
$services
$s
)
done
fi
_describe
-t
services-list
"services"
services
"
$@
"
&&
ret
=
0
return
ret
}
__docker_complete_services
()
{
[[
$PREFIX
=
-
*
]]
&&
return
1
__docker_services all
"
$@
"
}
__docker_complete_services_ids
()
{
[[
$PREFIX
=
-
*
]]
&&
return
1
__docker_services ids
"
$@
"
}
__docker_complete_services_names
()
{
[[
$PREFIX
=
-
*
]]
&&
return
1
__docker_services names
"
$@
"
}
__docker_service_commands
()
{
local
-a
_docker_service_subcommands
_docker_service_subcommands
=(
"create:Create a new service"
"inspect:Display detailed information on one or more services"
"ls:List services"
"rm:Remove one or more services"
"scale:Scale one or multiple services"
"ps:List the tasks of a service"
"update:Update a service"
)
_describe
-t
docker-service-commands
"docker service command"
_docker_service_subcommands
}
__docker_service_subcommand
()
{
local
-a
_command_args opts_help opts_create_update
local
expl
help
=
"--help"
integer
ret
=
1
opts_help
=(
"(: -)--help[Print usage]"
)
opts_create_update
=(
"(
$help
)*--constraint=[Placement constraints]:constraint: "
"(
$help
)--endpoint-mode=[Placement constraints]:mode:(dnsrr vip)"
"(
$help
)*"
{
-e
=
,--env
=}
"[Set environment variables]:env: "
"(
$help
)*--label=[Service labels]:label: "
"(
$help
)--limit-cpu=[Limit CPUs]:value: "
"(
$help
)--limit-memory=[Limit Memory]:value: "
"(
$help
)--log-driver=[Logging driver for service]:logging driver:__docker_log_drivers"
"(
$help
)*--log-opt=[Logging driver options]:log driver options:__docker_log_options"
"(
$help
)*--mount=[Attach a mount to the service]:mount: "
"(
$help
)--name=[Service name]:name: "
"(
$help
)*--network=[Network attachments]:network: "
"(
$help
)*"
{
-p
=
,--publish
=}
"[Publish a port as a node port]:port: "
"(
$help
)--replicas=[Number of tasks]:replicas: "
"(
$help
)--reserve-cpu=[Reserve CPUs]:value: "
"(
$help
)--reserve-memory=[Reserve Memory]:value: "
"(
$help
)--restart-condition=[Restart when condition is met]:mode:(any none on-failure)"
"(
$help
)--restart-delay=[Delay between restart attempts]:delay: "
"(
$help
)--restart-max-attempts=[Maximum number of restarts before giving up]:max-attempts: "
"(
$help
)--restart-window=[Window used to evaluate the restart policy]:window: "
"(
$help
)--stop-grace-period=[Time to wait before force killing a container]:grace period: "
"(
$help
)--update-delay=[Delay between updates]:delay: "
"(
$help
)--update-failure-action=[Action on update failure]:mode:(pause continue)"
"(
$help
)--update-parallelism=[Maximum number of tasks updated simultaneously]:number: "
"(
$help
-u --user)"
{
-u
=
,--user
=}
"[Username or UID]:user:_users"
"(
$help
)--with-registry-auth[Send registry authentication details to swarm agents]"
"(
$help
-w --workdir)"
{
-w
=
,--workdir
=}
"[Working directory inside the container]:directory:_directories"
)
case
"
$words
[1]"
in
(
create
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
$opts_create_update
\
"(
$help
)*--container-label=[Container labels]:label: "
\
"(
$help
)--mode=[Service Mode]:mode:(global replicated)"
\
"(
$help
-): :__docker_images"
\
"(
$help
-):command: _command_names -e"
\
"(
$help
-)*::arguments: _normal"
&&
ret
=
0
;;
(
inspect
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-f --format)"
{
-f
=
,--format
=}
"[Format the output using the given go template]:template: "
\
"(
$help
)--pretty[Print the information in a human friendly format]"
\
"(
$help
-)*:service:__docker_complete_services"
&&
ret
=
0
;;
(
ls
|
list
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
)*"
{
-f
=
,--filter
=}
"[Filter output based on conditions provided]:filter:->filter-options"
\
"(
$help
-q --quiet)"
{
-q
,--quiet
}
"[Only display IDs]"
&&
ret
=
0
case
$state
in
(
filter-options
)
__docker_service_complete_ls_filters
&&
ret
=
0
;;
esac
;;
(
rm
|
remove
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-)*:service:__docker_complete_services"
&&
ret
=
0
;;
(
scale
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-)*:service:->values"
&&
ret
=
0
case
$state
in
(
values
)
if
compset
-P
'*='
;
then
_message
'replicas'
&&
ret
=
0
else
__docker_complete_services
-qS
"="
fi
;;
esac
;;
(
ps
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-a --all)"
{
-a
,--all
}
"[Display all tasks]"
\
"(
$help
)*"
{
-f
=
,--filter
=}
"[Provide filter values]:filter:->filter-options"
\
"(
$help
)--no-resolve[Do not map IDs to Names]"
\
"(
$help
)--no-trunc[Do not truncate output]"
\
"(
$help
-)1:service:__docker_complete_services"
&&
ret
=
0
case
$state
in
(
filter-options
)
__docker_service_complete_ps_filters
&&
ret
=
0
;;
esac
;;
(
update
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
$opts_create_update
\
"(
$help
)--arg=[Service command args]:arguments: _normal"
\
"(
$help
)*--container-label-add=[Add or update container labels]:label: "
\
"(
$help
)*--container-label-rm=[Remove a container label by its key]:label: "
\
"(
$help
)--image=[Service image tag]:image:__docker_repositories"
\
"(
$help
-)1:service:__docker_complete_services"
&&
ret
=
0
;;
(
help
)
_arguments
$(
__docker_arguments
)
":subcommand:__docker_service_commands"
&&
ret
=
0
;;
esac
return
ret
}
# EO service
# BO swarm
__docker_swarm_commands
()
{
local
-a
_docker_swarm_subcommands
_docker_swarm_subcommands
=(
"init:Initialize a swarm"
"join:Join a swarm as a node and/or manager"
"join-token:Manage join tokens"
"leave:Leave a swarm"
"update:Update the swarm"
)
_describe
-t
docker-swarm-commands
"docker swarm command"
_docker_swarm_subcommands
}
__docker_swarm_subcommand
()
{
local
-a
_command_args opts_help
local
expl
help
=
"--help"
integer
ret
=
1
opts_help
=(
"(: -)--help[Print usage]"
)
case
"
$words
[1]"
in
(
init
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
)--advertise-addr[Advertised address]:ip
\:
port: "
\
"(
$help
)*--external-ca=[Specifications of one or more certificate signing endpoints]:endpoint: "
\
"(
$help
)--force-new-cluster[Force create a new cluster from current state]"
\
"(
$help
)--listen-addr=[Listen address]:ip
\:
port: "
&&
ret
=
0
;;
(
join
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
)--advertise-addr[Advertised address]:ip
\:
port: "
\
"(
$help
)--listen-addr=[Listen address]:ip
\:
port: "
\
"(
$help
)--token=[Token for entry into the swarm]:secret: "
\
"(
$help
-):host
\:
port: "
&&
ret
=
0
;;
(
join-token
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-q --quiet)"
{
-q
,--quiet
}
"[Only display token]"
\
"(
$help
)--rotate[Rotate join token]"
\
"(
$help
-):role:(manager worker)"
&&
ret
=
0
;;
(
leave
)
_arguments
$(
__docker_arguments
)
\
$opts_help
&&
ret
=
0
;;
(
update
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
)--cert-expiry=[Validity period for node certificates]:duration: "
\
"(
$help
)--dispatcher-heartbeat=[Dispatcher heartbeat period]:duration: "
\
"(
$help
)--task-history-limit=[Task history retention limit]:limit: "
&&
ret
=
0
;;
(
help
)
_arguments
$(
__docker_arguments
)
":subcommand:__docker_network_commands"
&&
ret
=
0
;;
esac
return
ret
}
# EO swarm
# BO volume
__docker_volume_complete_ls_filters
()
{
[[
$PREFIX
=
-
*
]]
&&
return
1
integer
ret
=
1
if
compset
-P
'*='
;
then
case
"
${${
words
[-1]%=*
}
#*=
}
"
in
(
dangling
)
dangling_opts
=(
'true'
'false'
)
_describe
-t
dangling-filter-opts
"Dangling Filter Options"
dangling_opts
&&
ret
=
0
;;
(
driver
)
__docker_complete_info_plugins Volume
&&
ret
=
0
;;
(
name
)
__docker_volumes
&&
ret
=
0
;;
*
)
_message
'value'
&&
ret
=
0
;;
esac
else
opts
=(
'dangling'
'driver'
'label'
'name'
)
_describe
-t
filter-opts
"Filter Options"
opts
-qS
"="
&&
ret
=
0
fi
return
ret
}
__docker_volumes
()
{
[[
$PREFIX
=
-
*
]]
&&
return
1
integer
ret
=
1
declare
-a
lines volumes
lines
=(
${
(f)
"
$(
_call_program commands docker
$docker_options
volume
ls
)
"
}
)
# Parse header line to find columns
local
i
=
1
j
=
1 k
header
=
${
lines
[1]
}
declare
-A
begin end
while
((
j <
${#
header
}
- 1
))
;
do
i
=
$((
j
+
${${
header
[
$j
,-1]
}
[(i)[^ ]]
}
-
1
))
j
=
$((
i
+
${${
header
[
$i
,-1]
}
[(i) ]
}
-
1
))
k
=
$((
j
+
${${
header
[
$j
,-1]
}
[(i)[^ ]]
}
-
2
))
begin[
${
header
[
$i
,
$((
j-1
))
]
}
]=
$i
end[
${
header
[
$i
,
$((
j-1
))
]
}
]=
$k
done
end[
${
header
[
$i
,
$((
j-1
))
]
}
]=
-1
lines
=(
${
lines
[2,-1]
}
)
# Names
local
line s
for
line
in
$lines
;
do
s
=
"
${
line
[
${
begin
[VOLUME NAME]
}
,
${
end
[VOLUME NAME]
}
]%% ##
}
"
s
=
"
$s
:
${
(l
:7::
:::
)
${${
line
[
${
begin
[DRIVER]
}
,
${
end
[DRIVER]
}
]
}
%% ##
}}
"
volumes
=(
$volumes
$s
)
done
_describe
-t
volumes-list
"volumes"
volumes
&&
ret
=
0
return
ret
}
__docker_volume_commands
()
{
local
-a
_docker_volume_subcommands
_docker_volume_subcommands
=(
"create:Create a volume"
"inspect:Display detailed information on one or more volumes"
"ls:List volumes"
"rm:Remove one or more volumes"
)
_describe
-t
docker-volume-commands
"docker volume command"
_docker_volume_subcommands
}
__docker_volume_subcommand
()
{
local
-a
_command_args opts_help
local
expl
help
=
"--help"
integer
ret
=
1
opts_help
=(
"(: -)--help[Print usage]"
)
case
"
$words
[1]"
in
(
create
)
_arguments
$(
__docker_arguments
)
-A
'-*'
\
$opts_help
\
"(
$help
-d --driver)"
{
-d
=
,--driver
=}
"[Volume driver name]:Driver name:(local)"
\
"(
$help
)*--label=[Set metadata for a volume]:label=value: "
\
"(
$help
)*"
{
-o
=
,--opt
=}
"[Driver specific options]:Driver option: "
\
"(
$help
-)1:Volume name: "
&&
ret
=
0
;;
(
inspect
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-f --format)"
{
-f
=
,--format
=}
"[Format the output using the given go template]:template: "
\
"(
$help
-)1:volume:__docker_volumes"
&&
ret
=
0
;;
(
ls
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
)*"
{
-f
=
,--filter
=}
"[Provide filter values]:filter:->filter-options"
\
"(
$help
)--format=[Pretty-print volumes using a Go template]:template: "
\
"(
$help
-q --quiet)"
{
-q
,--quiet
}
"[Only display volume names]"
&&
ret
=
0
case
$state
in
(
filter-options
)
__docker_volume_complete_ls_filters
&&
ret
=
0
;;
esac
;;
(
rm
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-f --force)"
{
-f
,--force
}
"[Force the removal of one or more volumes]"
\
"(
$help
-):volume:__docker_volumes"
&&
ret
=
0
;;
(
help
)
_arguments
$(
__docker_arguments
)
":subcommand:__docker_volume_commands"
&&
ret
=
0
;;
esac
return
ret
}
# EO volume
__docker_caching_policy
()
{
oldp
=(
"
$1
"
(
Nmh+1
)
)
# 1 hour
((
$#oldp
))
}
__docker_commands
()
{
local
cache_policy
zstyle
-s
":completion:
${
curcontext
}
:"
cache-policy cache_policy
if
[[
-z
"
$cache_policy
"
]]
;
then
zstyle
":completion:
${
curcontext
}
:"
cache-policy __docker_caching_policy
fi
if
(
[[
${
+_docker_subcommands
}
-eq
0
]]
||
_cache_invalid docker_subcommands
)
\
&&
!
_retrieve_cache docker_subcommands
;
then
local
-a
lines
lines
=(
${
(f)
"
$(
_call_program commands docker 2>&1
)
"
}
)
_docker_subcommands
=(
${${${
lines
[
$((${
lines
[(i)Commands
:]
}
+
1
))
,
${
lines
[(I) *]
}
]
}
## #
}
/ ##/
:
}
)
_docker_subcommands
=(
$_docker_subcommands
'daemon:Enable daemon mode'
'help:Show help for a command'
)
((
$#_docker_subcommands
>
2
))
&&
_store_cache docker_subcommands _docker_subcommands
fi
_describe
-t
docker-commands
"docker command"
_docker_subcommands
}
__docker_subcommand
()
{
local
-a
_command_args opts_help opts_build_create_run opts_build_create_run_update opts_create_run opts_create_run_update
local
expl
help
=
"--help"
integer
ret
=
1
opts_help
=(
"(: -)--help[Print usage]"
)
opts_build_create_run
=(
"(
$help
)--cgroup-parent=[Parent cgroup for the container]:cgroup: "
"(
$help
)--isolation=[Container isolation technology]:isolation:(default hyperv process)"
"(
$help
)--disable-content-trust[Skip image verification]"
"(
$help
)*--shm-size=[Size of '/dev/shm' (format is '<number><unit>')]:shm size: "
"(
$help
)*--ulimit=[ulimit options]:ulimit: "
"(
$help
)--userns=[Container user namespace]:user namespace:(host)"
)
opts_build_create_run_update
=(
"(
$help
-c --cpu-shares)"
{
-c
=
,--cpu-shares
=}
"[CPU shares (relative weight)]:CPU shares:(0 10 100 200 500 800 1000)"
"(
$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_run
=(
"(
$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-device=[Block IO (relative device weight)]:device:Block IO weight: "
"(
$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
)*--device-read-bps=[Limit the read rate (bytes per second) from a device]:device:IO rate: "
"(
$help
)*--device-read-iops=[Limit the read rate (IO per second) from a device]:device:IO rate: "
"(
$help
)*--device-write-bps=[Limit the write rate (bytes per second) to a device]:device:IO rate: "
"(
$help
)*--device-write-iops=[Limit the write rate (IO per second) to a device]:device:IO rate: "
"(
$help
)*--dns=[Custom DNS servers]:DNS server: "
"(
$help
)*--dns-opt=[Custom DNS options]:DNS option: "
"(
$help
)*--dns-search=[Custom DNS search domains]:DNS domains: "
"(
$help
)*"
{
-e
=
,--env
=}
"[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
)--ip=[Container IPv4 address]:IPv4: "
"(
$help
)--ip6=[Container IPv6 address]:IPv6: "
"(
$help
)--ipc=[IPC namespace to use]:IPC namespace: "
"(
$help
)*--link=[Add link to another container]:link:->link"
"(
$help
)*--link-local-ip=[Add a link-local address for the container]:IPv4/IPv6: "
"(
$help
)*"
{
-l
=
,--label
=}
"[Container metadata]:label: "
"(
$help
)--log-driver=[Default driver for container logs]:logging driver:__docker_log_drivers"
"(
$help
)*--log-opt=[Log driver specific options]:log driver options:__docker_log_options"
"(
$help
)--mac-address=[Container MAC address]:MAC address: "
"(
$help
)--name=[Container name]:name: "
"(
$help
)--network=[Connect a container to a network]:network mode:(bridge none container host)"
"(
$help
)*--network-alias=[Add network-scoped alias for the container]:alias: "
"(
$help
)--oom-kill-disable[Disable OOM Killer]"
"(
$help
)--oom-score-adj[Tune the host's OOM preferences for containers (accepts -1000 to 1000)]"
"(
$help
)--pids-limit[Tune container pids limit (set -1 for unlimited)]"
"(
$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 namespace:__docker_complete_pid"
"(
$help
)--privileged[Give extended privileges to this container]"
"(
$help
)--read-only[Mount the container's root filesystem as read only]"
"(
$help
)*--security-opt=[Security options]:security option: "
"(
$help
)*--sysctl=-[sysctl options]:sysctl: "
"(
$help
-t --tty)"
{
-t
,--tty
}
"[Allocate a pseudo-tty]"
"(
$help
-u --user)"
{
-u
=
,--user
=}
"[Username or UID]:user:_users"
"(
$help
)--tmpfs[mount tmpfs]"
"(
$help
)*-v[Bind mount a volume]:volume: "
"(
$help
)--volume-driver=[Optional volume driver for the container]:volume driver:(local)"
"(
$help
)*--volumes-from=[Mount volumes from the specified container]:volume: "
"(
$help
-w --workdir)"
{
-w
=
,--workdir
=}
"[Working directory inside the container]:directory:_directories"
)
opts_create_run_update
=(
"(
$help
)--blkio-weight=[Block IO (relative weight), between 10 and 1000]:Block IO weight:(10 100 500 1000)"
"(
$help
)--kernel-memory=[Kernel memory limit in bytes]:Memory limit: "
"(
$help
)--memory-reservation=[Memory soft limit]:Memory limit: "
"(
$help
)--restart=[Restart policy]:restart policy:(no on-failure always unless-stopped)"
)
opts_attach_exec_run_start
=(
"(
$help
)--detach-keys=[Escape key sequence used to detach a container]:sequence:__docker_complete_detach_keys"
)
case
"
$words
[1]"
in
(
attach
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
$opts_attach_exec_run_start
\
"(
$help
)--no-stdin[Do not attach stdin]"
\
"(
$help
)--sig-proxy[Proxy all received signals to the process (non-TTY mode only)]"
\
"(
$help
-):containers:__docker_runningcontainers"
&&
ret
=
0
;;
(
build
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
$opts_build_create_run
\
$opts_build_create_run_update
\
"(
$help
)*--build-arg[Build-time variables]:<varname>=<value>: "
\
"(
$help
-f --file)"
{
-f
=
,--file
=}
"[Name of the Dockerfile]:Dockerfile:_files"
\
"(
$help
)--force-rm[Always remove intermediate containers]"
\
"(
$help
)*--label=[Set metadata for an image]:label=value: "
\
"(
$help
)--no-cache[Do not use cache when building the image]"
\
"(
$help
)--pull[Attempt to pull a newer version of the image]"
\
"(
$help
-q --quiet)"
{
-q
,--quiet
}
"[Suppress verbose build output]"
\
"(
$help
)--rm[Remove intermediate containers after a successful build]"
\
"(
$help
-t --tag)*"
{
-t
=
,--tag
=}
"[Repository, name and tag for the image]: :__docker_repositories_with_tags"
\
"(
$help
-):path or URL:_directories"
&&
ret
=
0
;;
(
commit
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-a --author)"
{
-a
=
,--author
=}
"[Author]:author: "
\
"(
$help
)*"
{
-c
=
,--change
=}
"[Apply Dockerfile instruction to the created image]:Dockerfile:_files"
\
"(
$help
-m --message)"
{
-m
=
,--message
=}
"[Commit message]:message: "
\
"(
$help
-p --pause)"
{
-p
,--pause
}
"[Pause container during commit]"
\
"(
$help
-):container:__docker_containers"
\
"(
$help
-): :__docker_repositories_with_tags"
&&
ret
=
0
;;
(
cp
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-L --follow-link)"
{
-L
,--follow-link
}
"[Always follow symbol link]"
\
"(
$help
-)1:container:->container"
\
"(
$help
-)2:hostpath:_files"
&&
ret
=
0
case
$state
in
(
container
)
if
compset
-P
"*:"
;
then
_files
&&
ret
=
0
else
__docker_containers
-qS
":"
&&
ret
=
0
fi
;;
esac
;;
(
create
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
$opts_build_create_run
\
$opts_build_create_run_update
\
$opts_create_run
\
$opts_create_run_update
\
"(
$help
-): :__docker_images"
\
"(
$help
-):command: _command_names -e"
\
"(
$help
-)*::arguments: _normal"
&&
ret
=
0
case
$state
in
(
link
)
if
compset
-P
"*:"
;
then
_wanted
alias
expl
"Alias"
compadd
-E
""
&&
ret
=
0
else
__docker_runningcontainers
-qS
":"
&&
ret
=
0
fi
;;
esac
;;
(
daemon
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
)*--add-runtime=[Register an additional OCI compatible runtime]:runtime:__docker_complete_runtimes"
\
"(
$help
)--api-cors-header=[CORS headers in the remote API]:CORS headers: "
\
"(
$help
)*--authorization-plugin=[Authorization plugins to load]"
\
"(
$help
-b --bridge)"
{
-b
=
,--bridge
=}
"[Attach containers to a network bridge]:bridge:_net_interfaces"
\
"(
$help
)--bip=[Network bridge IP]:IP address: "
\
"(
$help
)--cgroup-parent=[Parent cgroup for all containers]:cgroup: "
\
"(
$help
)--config-file=[Path to daemon configuration file]:Config File:_files"
\
"(
$help
)--containerd=[Path to containerd socket]:socket:_files -g
\"
*.sock
\"
"
\
"(
$help
-D --debug)"
{
-D
,--debug
}
"[Enable debug mode]"
\
"(
$help
)--default-gateway[Container default gateway IPv4 address]:IPv4 address: "
\
"(
$help
)--default-gateway-v6[Container default gateway IPv6 address]:IPv6 address: "
\
"(
$help
)--cluster-store=[URL of the distributed storage backend]:Cluster Store:->cluster-store"
\
"(
$help
)--cluster-advertise=[Address or interface name to advertise]:Instance to advertise (host
\:
port): "
\
"(
$help
)*--cluster-store-opt=[Cluster store options]:Cluster options:->cluster-store-options"
\
"(
$help
)*--dns=[DNS server to use]:DNS: "
\
"(
$help
)*--dns-search=[DNS search domains to use]:DNS search: "
\
"(
$help
)*--dns-opt=[DNS options to use]:DNS option: "
\
"(
$help
)*--default-ulimit=[Default ulimits for containers]:ulimit: "
\
"(
$help
)--disable-legacy-registry[Disable contacting legacy registries]"
\
"(
$help
)*--exec-opt=[Runtime execution options]:runtime execution options: "
\
"(
$help
)--exec-root=[Root directory for execution state files]:path:_directories"
\
"(
$help
)--fixed-cidr=[IPv4 subnet for fixed IPs]:IPv4 subnet: "
\
"(
$help
)--fixed-cidr-v6=[IPv6 subnet for fixed IPs]:IPv6 subnet: "
\
"(
$help
-G --group)"
{
-G
=
,--group
=}
"[Group for the unix socket]:group:_groups"
\
"(
$help
-g --graph)"
{
-g
=
,--graph
=}
"[Root of the Docker runtime]:path:_directories"
\
"(
$help
-H --host)"
{
-H
=
,--host
=}
"[tcp://host:port to bind/connect to]:host: "
\
"(
$help
)--icc[Enable inter-container communication]"
\
"(
$help
)*--insecure-registry=[Enable insecure registry communication]:registry: "
\
"(
$help
)--ip=[Default IP when binding container ports]"
\
"(
$help
)--ip-forward[Enable net.ipv4.ip_forward]"
\
"(
$help
)--ip-masq[Enable IP masquerading]"
\
"(
$help
)--iptables[Enable addition of iptables rules]"
\
"(
$help
)--ipv6[Enable IPv6 networking]"
\
"(
$help
-l --log-level)"
{
-l
=
,--log-level
=}
"[Logging level]:level:(debug info warn error fatal)"
\
"(
$help
)*--label=[Key=value labels]:label: "
\
"(
$help
)--live-restore[Enable live restore of docker when containers are still running]"
\
"(
$help
)--log-driver=[Default driver for container logs]:logging driver:__docker_log_drivers"
\
"(
$help
)*--log-opt=[Default log driver options for containers]:log driver options:__docker_log_options"
\
"(
$help
)--max-concurrent-downloads[Set the max concurrent downloads for each pull]"
\
"(
$help
)--max-concurrent-uploads[Set the max concurrent uploads for each push]"
\
"(
$help
)--mtu=[Network MTU]:mtu:(0 576 1420 1500 9000)"
\
"(
$help
)--oom-score-adjust=[Set the oom_score_adj for the daemon]:oom-score:(-500)"
\
"(
$help
-p --pidfile)"
{
-p
=
,--pidfile
=}
"[Path to use for daemon PID file]:PID file:_files"
\
"(
$help
)--raw-logs[Full timestamps without ANSI coloring]"
\
"(
$help
)*--registry-mirror=[Preferred Docker registry mirror]:registry mirror: "
\
"(
$help
-s --storage-driver)"
{
-s
=
,--storage-driver
=}
"[Storage driver to use]:driver:(aufs btrfs devicemapper overlay overlay2 vfs zfs)"
\
"(
$help
)--selinux-enabled[Enable selinux support]"
\
"(
$help
)*--storage-opt=[Storage driver options]:storage driver options: "
\
"(
$help
)--tls[Use TLS]"
\
"(
$help
)--tlscacert=[Trust certs signed only by this CA]:PEM file:_files -g
\"
*.(pem|crt)
\"
"
\
"(
$help
)--tlscert=[Path to TLS certificate file]:PEM file:_files -g
\"
*.(pem|crt)
\"
"
\
"(
$help
)--tlskey=[Path to TLS key file]:Key file:_files -g
\"
*.(pem|key)
\"
"
\
"(
$help
)--tlsverify[Use TLS and verify the remote]"
\
"(
$help
)--userns-remap=[User/Group setting for user namespaces]:user
\:
group:->users-groups"
\
"(
$help
)--userland-proxy[Use userland proxy for loopback traffic]"
&&
ret
=
0
case
$state
in
(
cluster-store
)
if
compset
-P
'*://'
;
then
_message
'host:port'
&&
ret
=
0
else
store
=(
'consul'
'etcd'
'zk'
)
_describe
-t
cluster-store
"Cluster Store"
store
-qS
"://"
&&
ret
=
0
fi
;;
(
cluster-store-options
)
if
compset
-P
'*='
;
then
_files
&&
ret
=
0
else
opts
=(
'discovery.heartbeat'
'discovery.ttl'
'kv.cacertfile'
'kv.certfile'
'kv.keyfile'
'kv.path'
)
_describe
-t
cluster-store-opts
"Cluster Store Options"
opts
-qS
"="
&&
ret
=
0
fi
;;
(
users-groups
)
if
compset
-P
'*:'
;
then
_groups
&&
ret
=
0
else
_describe
-t
userns-default
"default Docker user management"
'(default)'
&&
ret
=
0
_users
&&
ret
=
0
fi
;;
esac
;;
(
diff
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-)*:containers:__docker_containers"
&&
ret
=
0
;;
(
events
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
)*"
{
-f
=
,--filter
=}
"[Filter values]:filter:__docker_complete_events_filter"
\
"(
$help
)--since=[Events created since this timestamp]:timestamp: "
\
"(
$help
)--until=[Events created until this timestamp]:timestamp: "
&&
ret
=
0
;;
(
exec
)
local
state
_arguments
$(
__docker_arguments
)
\
$opts_help
\
$opts_attach_exec_run_start
\
"(
$help
-d --detach)"
{
-d
,--detach
}
"[Detached mode: leave the container running in the background]"
\
"(
$help
-i --interactive)"
{
-i
,--interactive
}
"[Keep stdin open even if not attached]"
\
"(
$help
)--privileged[Give extended Linux capabilities to the command]"
\
"(
$help
-t --tty)"
{
-t
,--tty
}
"[Allocate a pseudo-tty]"
\
"(
$help
-u --user)"
{
-u
=
,--user
=}
"[Username or UID]:user:_users"
\
"(
$help
-):containers:__docker_runningcontainers"
\
"(
$help
-)*::command:->anycommand"
&&
ret
=
0
case
$state
in
(
anycommand
)
shift
1 words
((
CURRENT--
))
_normal
&&
ret
=
0
;;
esac
;;
(
export
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-o --output)"
{
-o
=
,--output
=}
"[Write to a file, instead of stdout]:output file:_files"
\
"(
$help
-)*:containers:__docker_containers"
&&
ret
=
0
;;
(
history
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-H --human)"
{
-H
,--human
}
"[Print sizes and dates in human readable format]"
\
"(
$help
)--no-trunc[Do not truncate output]"
\
"(
$help
-q --quiet)"
{
-q
,--quiet
}
"[Only show numeric IDs]"
\
"(
$help
-)*: :__docker_images"
&&
ret
=
0
;;
(
images
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-a --all)"
{
-a
,--all
}
"[Show all images]"
\
"(
$help
)--digests[Show digests]"
\
"(
$help
)*"
{
-f
=
,--filter
=}
"[Filter values]:filter:->filter-options"
\
"(
$help
)--format[Pretty-print containers using a Go template]:template: "
\
"(
$help
)--no-trunc[Do not truncate output]"
\
"(
$help
-q --quiet)"
{
-q
,--quiet
}
"[Only show numeric IDs]"
\
"(
$help
-): :__docker_repositories"
&&
ret
=
0
case
$state
in
(
filter-options
)
__docker_complete_images_filters
&&
ret
=
0
;;
esac
;;
(
import
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
)*"
{
-c
=
,--change
=}
"[Apply Dockerfile instruction to the created image]:Dockerfile:_files"
\
"(
$help
-m --message)"
{
-m
=
,--message
=}
"[Commit message for imported image]:message: "
\
"(
$help
-):URL:(- http:// file://)"
\
"(
$help
-): :__docker_repositories_with_tags"
&&
ret
=
0
;;
(
info|version
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-f --format)"
{
-f
=
,--format
=}
"[Format the output using the given go template]:template: "
&&
ret
=
0
;;
(
inspect
)
local
state
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-f --format)"
{
-f
=
,--format
=}
"[Format the output using the given go template]:template: "
\
"(
$help
-s --size)"
{
-s
,--size
}
"[Display total file sizes if the type is container]"
\
"(
$help
)--type=[Return JSON for specified type]:type:(image container)"
\
"(
$help
-)*: :->values"
&&
ret
=
0
case
$state
in
(
values
)
if
[[
${
words
[(r)--type=container]
}
==
--type
=
container
]]
;
then
__docker_containers
&&
ret
=
0
elif
[[
${
words
[(r)--type=image]
}
==
--type
=
image
]]
;
then
__docker_images
&&
ret
=
0
else
__docker_images
&&
__docker_containers
&&
ret
=
0
fi
;;
esac
;;
(
kill
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-s --signal)"
{
-s
=
,--signal
=}
"[Signal to send]:signal:_signals"
\
"(
$help
-)*:containers:__docker_runningcontainers"
&&
ret
=
0
;;
(
load
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$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))(-.)
\"
"
\
"(
$help
-q --quiet)"
{
-q
,--quiet
}
"[Suppress the load output]"
&&
ret
=
0
;;
(
login
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-p --password)"
{
-p
=
,--password
=}
"[Password]:password: "
\
"(
$help
-u --user)"
{
-u
=
,--user
=}
"[Username]:username: "
\
"(
$help
-)1:server: "
&&
ret
=
0
;;
(
logout
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-)1:server: "
&&
ret
=
0
;;
(
logs
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
)--details[Show extra details provided to logs]"
\
"(
$help
-f --follow)"
{
-f
,--follow
}
"[Follow log output]"
\
"(
$help
-s --since)"
{
-s
=
,--since
=}
"[Show logs since this timestamp]:timestamp: "
\
"(
$help
-t --timestamps)"
{
-t
,--timestamps
}
"[Show timestamps]"
\
"(
$help
)--tail=[Output the last K lines]:lines:(1 10 20 50 all)"
\
"(
$help
-)*:containers:__docker_containers"
&&
ret
=
0
;;
(
network
)
local
curcontext
=
"
$curcontext
"
state
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-): :->command"
\
"(
$help
-)*:: :->option-or-argument"
&&
ret
=
0
case
$state
in
(
command
)
__docker_network_commands
&&
ret
=
0
;;
(
option-or-argument
)
curcontext
=
${
curcontext
%
:
*
:
*
}
:docker-
${
words
[-1]
}
:
__docker_network_subcommand
&&
ret
=
0
;;
esac
;;
(
node
)
local
curcontext
=
"
$curcontext
"
state
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-): :->command"
\
"(
$help
-)*:: :->option-or-argument"
&&
ret
=
0
case
$state
in
(
command
)
__docker_node_commands
&&
ret
=
0
;;
(
option-or-argument
)
curcontext
=
${
curcontext
%
:
*
:
*
}
:docker-
${
words
[-1]
}
:
__docker_node_subcommand
&&
ret
=
0
;;
esac
;;
(
pause|unpause
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-)*:containers:__docker_runningcontainers"
&&
ret
=
0
;;
(
plugin
)
local
curcontext
=
"
$curcontext
"
state
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-): :->command"
\
"(
$help
-)*:: :->option-or-argument"
&&
ret
=
0
case
$state
in
(
command
)
__docker_plugin_commands
&&
ret
=
0
;;
(
option-or-argument
)
curcontext
=
${
curcontext
%
:
*
:
*
}
:docker-
${
words
[-1]
}
:
__docker_plugin_subcommand
&&
ret
=
0
;;
esac
;;
(
port
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-)1:containers:__docker_runningcontainers"
\
"(
$help
-)2:port:_ports"
&&
ret
=
0
;;
(
ps
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-a --all)"
{
-a
,--all
}
"[Show all containers]"
\
"(
$help
)--before=[Show only container created before...]:containers:__docker_containers"
\
"(
$help
)*"
{
-f
=
,--filter
=}
"[Filter values]:filter:__docker_complete_ps_filters"
\
"(
$help
)--format[Pretty-print containers using a Go template]:template: "
\
"(
$help
-l --latest)"
{
-l
,--latest
}
"[Show only the latest created container]"
\
"(
$help
-n --last)"
{
-n
=
,--last
=}
"[Show n last created containers (includes all states)]:n:(1 5 10 25 50)"
\
"(
$help
)--no-trunc[Do not truncate output]"
\
"(
$help
-q --quiet)"
{
-q
,--quiet
}
"[Only show numeric IDs]"
\
"(
$help
-s --size)"
{
-s
,--size
}
"[Display total file sizes]"
\
"(
$help
)--since=[Show only containers created since...]:containers:__docker_containers"
&&
ret
=
0
;;
(
pull
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-a --all-tags)"
{
-a
,--all-tags
}
"[Download all tagged images]"
\
"(
$help
)--disable-content-trust[Skip image verification]"
\
"(
$help
-):name:__docker_search"
&&
ret
=
0
;;
(
push
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
)--disable-content-trust[Skip image signing]"
\
"(
$help
-): :__docker_images"
&&
ret
=
0
;;
(
rename
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-):old name:__docker_containers"
\
"(
$help
-):new name: "
&&
ret
=
0
;;
(
restart|stop
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$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)"
\
"(
$help
-)*:containers:__docker_runningcontainers"
&&
ret
=
0
;;
(
rm
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-f --force)"
{
-f
,--force
}
"[Force removal]"
\
"(
$help
-l --link)"
{
-l
,--link
}
"[Remove the specified link and not the underlying container]"
\
"(
$help
-v --volumes)"
{
-v
,--volumes
}
"[Remove the volumes associated to the container]"
\
"(
$help
-)*:containers:->values"
&&
ret
=
0
case
$state
in
(
values
)
if
[[
${
words
[(r)-f]
}
==
-f
||
${
words
[(r)--force]
}
==
--force
]]
;
then
__docker_containers
&&
ret
=
0
else
__docker_stoppedcontainers
&&
ret
=
0
fi
;;
esac
;;
(
rmi
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-f --force)"
{
-f
,--force
}
"[Force removal]"
\
"(
$help
)--no-prune[Do not delete untagged parents]"
\
"(
$help
-)*: :__docker_images"
&&
ret
=
0
;;
(
run
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
$opts_build_create_run
\
$opts_build_create_run_update
\
$opts_create_run
\
$opts_create_run_update
\
$opts_attach_exec_run_start
\
"(
$help
-d --detach)"
{
-d
,--detach
}
"[Detached mode: leave the container running in the background]"
\
"(
$help
)--health-cmd=[Command to run to check health]:command: "
\
"(
$help
)--health-interval=[Time between running the check]:time: "
\
"(
$help
)--health-retries=[Consecutive failures needed to report unhealthy]:retries:(1 2 3 4 5)"
\
"(
$help
)--health-timeout=[Maximum time to allow one check to run]:time: "
\
"(
$help
)--no-healthcheck[Disable any container-specified HEALTHCHECK]"
\
"(
$help
)--rm[Remove intermediate containers when it exits]"
\
"(
$help
)--runtime=[Name of the runtime to be used for that container]:runtime:__docker_complete_runtimes"
\
"(
$help
)--sig-proxy[Proxy all received signals to the process (non-TTY mode only)]"
\
"(
$help
)--stop-signal=[Signal to kill a container]:signal:_signals"
\
"(
$help
)--storage-opt=[Storage driver options for the container]:storage options:->storage-opt"
\
"(
$help
-): :__docker_images"
\
"(
$help
-):command: _command_names -e"
\
"(
$help
-)*::arguments: _normal"
&&
ret
=
0
case
$state
in
(
link
)
if
compset
-P
"*:"
;
then
_wanted
alias
expl
"Alias"
compadd
-E
""
&&
ret
=
0
else
__docker_runningcontainers
-qS
":"
&&
ret
=
0
fi
;;
(
storage-opt
)
if
compset
-P
"*="
;
then
_message
"value"
&&
ret
=
0
else
opts
=(
'size'
)
_describe
-t
filter-opts
"storage options"
opts
-qS
"="
&&
ret
=
0
fi
;;
esac
;;
(
save
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-o --output)"
{
-o
=
,--output
=}
"[Write to file]:file:_files"
\
"(
$help
-)*: :__docker_images"
&&
ret
=
0
;;
(
search
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
)*"
{
-f
=
,--filter
=}
"[Filter values]:filter:->filter-options"
\
"(
$help
)--limit=[Maximum returned search results]:limit:(1 5 10 25 50)"
\
"(
$help
)--no-trunc[Do not truncate output]"
\
"(
$help
-):term: "
&&
ret
=
0
case
$state
in
(
filter-options
)
__docker_complete_search_filters
&&
ret
=
0
;;
esac
;;
(
service
)
local
curcontext
=
"
$curcontext
"
state
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-): :->command"
\
"(
$help
-)*:: :->option-or-argument"
&&
ret
=
0
case
$state
in
(
command
)
__docker_service_commands
&&
ret
=
0
;;
(
option-or-argument
)
curcontext
=
${
curcontext
%
:
*
:
*
}
:docker-
${
words
[-1]
}
:
__docker_service_subcommand
&&
ret
=
0
;;
esac
;;
(
start
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
$opts_attach_exec_run_start
\
"(
$help
-a --attach)"
{
-a
,--attach
}
"[Attach container's stdout/stderr and forward all signals]"
\
"(
$help
-i --interactive)"
{
-i
,--interactive
}
"[Attach container's stding]"
\
"(
$help
-)*:containers:__docker_stoppedcontainers"
&&
ret
=
0
;;
(
stats
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-a --all)"
{
-a
,--all
}
"[Show all containers (default shows just running)]"
\
"(
$help
)--no-stream[Disable streaming stats and only pull the first result]"
\
"(
$help
-)*:containers:__docker_runningcontainers"
&&
ret
=
0
;;
(
swarm
)
local
curcontext
=
"
$curcontext
"
state
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-): :->command"
\
"(
$help
-)*:: :->option-or-argument"
&&
ret
=
0
case
$state
in
(
command
)
__docker_swarm_commands
&&
ret
=
0
;;
(
option-or-argument
)
curcontext
=
${
curcontext
%
:
*
:
*
}
:docker-
${
words
[-1]
}
:
__docker_swarm_subcommand
&&
ret
=
0
;;
esac
;;
(
tag
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-):source:__docker_images"
\
"(
$help
-):destination:__docker_repositories_with_tags"
&&
ret
=
0
;;
(
top
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-)1:containers:__docker_runningcontainers"
\
"(
$help
-)*:: :->ps-arguments"
&&
ret
=
0
case
$state
in
(
ps-arguments
)
_ps
&&
ret
=
0
;;
esac
;;
(
update
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
$opts_create_run_update
\
$opts_build_create_run_update
\
"(
$help
-)*: :->values"
&&
ret
=
0
case
$state
in
(
values
)
if
[[
${
words
[(r)--kernel-memory*]
}
=
(
--kernel-memory
*
)
]]
;
then
__docker_stoppedcontainers
&&
ret
=
0
else
__docker_containers
&&
ret
=
0
fi
;;
esac
;;
(
volume
)
local
curcontext
=
"
$curcontext
"
state
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-): :->command"
\
"(
$help
-)*:: :->option-or-argument"
&&
ret
=
0
case
$state
in
(
command
)
__docker_volume_commands
&&
ret
=
0
;;
(
option-or-argument
)
curcontext
=
${
curcontext
%
:
*
:
*
}
:docker-
${
words
[-1]
}
:
__docker_volume_subcommand
&&
ret
=
0
;;
esac
;;
(
wait
)
_arguments
$(
__docker_arguments
)
\
$opts_help
\
"(
$help
-)*:containers:__docker_runningcontainers"
&&
ret
=
0
;;
(
help
)
_arguments
$(
__docker_arguments
)
":subcommand:__docker_commands"
&&
ret
=
0
;;
esac
return
ret
}
_docker
()
{
# Support for subservices, which allows for `compdef _docker docker-shell=_docker_containers`.
# Based on /usr/share/zsh/functions/Completion/Unix/_git without support for `ret`.
if
[[
$service
!=
docker
]]
;
then
_call_function - _
$service
return
return
fi
fi
local -a _command_args
local
curcontext
=
"
$curcontext
"
state line
help
=
"-h --help"
case "$words[1]" in
integer
ret
=
1
attach)
typeset
-A
opt_args
__attach ;;
build)
_arguments
$(
__docker_arguments
)
-C
\
__build ;;
"(: -)"
{
-h
,--help
}
"[Print usage]"
\
commit)
"(
$help
)--config[Location of client config files]:path:_directories"
\
__commit ;;
"(
$help
-D --debug)"
{
-D
,--debug
}
"[Enable debug mode]"
\
cp)
"(
$help
-H --host)"
{
-H
=
,--host
=}
"[tcp://host:port to bind/connect to]:host: "
\
__cp ;;
"(
$help
-l --log-level)"
{
-l
=
,--log-level
=}
"[Logging level]:level:(debug info warn error fatal)"
\
create)
"(
$help
)--tls[Use TLS]"
\
__create ;;
"(
$help
)--tlscacert=[Trust certs signed only by this CA]:PEM file:_files -g "
*
.
(
pem|crt
)
""
\
diff)
"(
$help
)--tlscert=[Path to TLS certificate file]:PEM file:_files -g "
*
.
(
pem|crt
)
""
\
__diff ;;
"(
$help
)--tlskey=[Path to TLS key file]:Key file:_files -g "
*
.
(
pem|key
)
""
\
events)
"(
$help
)--tlsverify[Use TLS and verify the remote]"
\
__events ;;
"(
$help
)--userland-proxy[Use userland proxy for loopback traffic]"
\
export)
"(
$help
-v --version)"
{
-v
,--version
}
"[Print version information and quit]"
\
__export ;;
"(
$help
-): :->command"
\
history)
"(
$help
-)*:: :->option-or-argument"
&&
ret
=
0
__history ;;
images)
local
host
=
${
opt_args
[-H]
}${
opt_args
[--host]
}
__images ;;
local
config
=
${
opt_args
[--config]
}
import)
local
docker_options
=
"
${
host
:+--host
$host
}
${
config
:+--config
$config
}
"
__import ;;
info)
case
$state
in
__info ;;
(
command
)
inspect)
__docker_commands
&&
ret
=
0
__inspect ;;
;;
kill)
(
option-or-argument
)
__kill ;;
curcontext
=
${
curcontext
%
:
*
:
*
}
:docker-
$words
[
1]:
load)
__docker_subcommand
&&
ret
=
0
__load ;;
;;
login)
esac
__login ;;
logs)
return
ret
__logs ;;
}
port)
__port ;;
_dockerd
()
{
ps)
integer
ret
=
1
__ps ;;
words[1]
=
'daemon'
pull)
__docker_subcommand
&&
ret
=
0
__pull ;;
return
ret
push)
}
__push ;;
restart)
_docker
"
$@
"
__restart ;;
rm)
# Local Variables:
__rm ;;
# mode: Shell-Script
rmi)
# sh-indentation: 4
__rmi ;;
# indent-tabs-mode: nil
run)
# sh-basic-offset: 4
__run ;;
# End:
save)
# vim: ft=zsh sw=4 ts=4 et
__save ;;
search)
__search ;;
stats)
__stats ;;
start)
__start ;;
stop)
__stop ;;
tag)
__tag ;;
top)
__top ;;
version)
__version ;;
wait)
__wait ;;
exec)
__exec ;;
esac
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment