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
"vscode:/vscode.git/clone" did not exist on "5e9a16b88a5cffe015101f992e29fa0d50027f5d"
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
Hide 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
return
}
fi
__docker_plugin_subcommand
()
{
local -a _command_args
local
-a
_command_args opts_help
case "$words[1]" in
local
expl
help
=
"--help"
attach)
integer
ret
=
1
__attach ;;
build)
opts_help
=(
"(: -)--help[Print usage]"
)
__build ;;
commit)
case
"
$words
[1]"
in
__commit ;;
(
disable|enable|inspect|install|ls|push|rm
)
cp)
_arguments
$(
__docker_arguments
)
\
__cp ;;
$opts_help
\
create)
"(
$help
-)1:plugin:__docker_complete_plugins"
&&
ret
=
0
__create ;;
;;
diff)
(
set
)
__diff ;;
_arguments
$(
__docker_arguments
)
\
events)
$opts_help
\
__events ;;
"(
$help
-)1:plugin:__docker_complete_plugins"
\
export)
"(
$help
-)*:key=value: "
&&
ret
=
0
__export ;;
;;
history)
(
help
)
__history ;;
_arguments
$(
__docker_arguments
)
":subcommand:__docker_plugin_commands"
&&
ret
=
0
images)
;;
__images ;;
esac
import)
__import ;;
return
ret
info)
}
__info ;;
inspect)
# EO plugin
__inspect ;;
kill)
# BO service
__kill ;;
load)
__docker_service_complete_ls_filters
()
{
__load ;;
[[
$PREFIX
=
-
*
]]
&&
return
1
login)
integer
ret
=
1
__login ;;
logs)
if
compset
-P
'*='
;
then
__logs ;;
case
"
${${
words
[-1]%=*
}
#*=
}
"
in
port)
(
id
)
__port ;;
__docker_complete_services_ids
&&
ret
=
0
ps)
;;
__ps ;;
(
name
)
pull)
__docker_complete_services_names
&&
ret
=
0
__pull ;;
;;
push)
*
)
__push ;;
_message
'value'
&&
ret
=
0
restart)
;;
__restart ;;
esac
rm)
else
__rm ;;
opts
=(
'id'
'label'
'name'
)
rmi)
_describe
-t
filter-opts
"filter options"
opts
-qS
"="
&&
ret
=
0
__rmi ;;
fi
run)
__run ;;
return
ret
save)
}
__save ;;
search)
__docker_service_complete_ps_filters
()
{
__search ;;
[[
$PREFIX
=
-
*
]]
&&
return
1
stats)
integer
ret
=
1
__stats ;;
start)
if
compset
-P
'*='
;
then
__start ;;
case
"
${${
words
[-1]%=*
}
#*=
}
"
in
stop)
(
desired-state
)
__stop ;;
state_opts
=(
'accepted'
'running'
)
tag)
_describe
-t
state-opts
"desired state options"
state_opts
&&
ret
=
0
__tag ;;
;;
top)
*
)
__top ;;
_message
'value'
&&
ret
=
0
version)
;;
__version ;;
esac
wait)
else
__wait ;;
opts
=(
'desired-state'
'id'
'label'
'name'
)
exec)
_describe
-t
filter-opts
"filter options"
opts
-qS
"="
&&
ret
=
0
__exec ;;
fi
esac
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
fi
local
curcontext
=
"
$curcontext
"
state line
help
=
"-h --help"
integer
ret
=
1
typeset
-A
opt_args
_arguments
$(
__docker_arguments
)
-C
\
"(: -)"
{
-h
,--help
}
"[Print usage]"
\
"(
$help
)--config[Location of client config files]:path:_directories"
\
"(
$help
-D --debug)"
{
-D
,--debug
}
"[Enable debug mode]"
\
"(
$help
-H --host)"
{
-H
=
,--host
=}
"[tcp://host:port to bind/connect to]:host: "
\
"(
$help
-l --log-level)"
{
-l
=
,--log-level
=}
"[Logging level]:level:(debug info warn error fatal)"
\
"(
$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
)--userland-proxy[Use userland proxy for loopback traffic]"
\
"(
$help
-v --version)"
{
-v
,--version
}
"[Print version information and quit]"
\
"(
$help
-): :->command"
\
"(
$help
-)*:: :->option-or-argument"
&&
ret
=
0
local
host
=
${
opt_args
[-H]
}${
opt_args
[--host]
}
local
config
=
${
opt_args
[--config]
}
local
docker_options
=
"
${
host
:+--host
$host
}
${
config
:+--config
$config
}
"
case
$state
in
(
command
)
__docker_commands
&&
ret
=
0
;;
(
option-or-argument
)
curcontext
=
${
curcontext
%
:
*
:
*
}
:docker-
$words
[
1]:
__docker_subcommand
&&
ret
=
0
;;
esac
return
ret
}
_dockerd
()
{
integer
ret
=
1
words[1]
=
'daemon'
__docker_subcommand
&&
ret
=
0
return
ret
}
_docker
"
$@
"
# Local Variables:
# mode: Shell-Script
# sh-indentation: 4
# indent-tabs-mode: nil
# sh-basic-offset: 4
# End:
# vim: ft=zsh sw=4 ts=4 et
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