github.com/fabiokung/docker@v0.11.2-0.20170222101415-4534dcd49497/contrib/completion/zsh/_docker (about) 1 #compdef docker dockerd 2 # 3 # zsh completion for docker (http://docker.com) 4 # 5 # version: 0.3.0 6 # github: https://github.com/felixr/docker-zsh-completion 7 # 8 # contributors: 9 # - Felix Riedel 10 # - Steve Durrheimer 11 # - Vincent Bernat 12 # 13 # license: 14 # 15 # Copyright (c) 2013, Felix Riedel 16 # All rights reserved. 17 # 18 # Redistribution and use in source and binary forms, with or without 19 # modification, are permitted provided that the following conditions are met: 20 # * Redistributions of source code must retain the above copyright 21 # notice, this list of conditions and the following disclaimer. 22 # * Redistributions in binary form must reproduce the above copyright 23 # notice, this list of conditions and the following disclaimer in the 24 # documentation and/or other materials provided with the distribution. 25 # * Neither the name of the <organization> nor the 26 # names of its contributors may be used to endorse or promote products 27 # derived from this software without specific prior written permission. 28 # 29 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 30 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 31 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 32 # DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY 33 # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 34 # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 35 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 36 # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 37 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 38 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 39 # 40 41 # Short-option stacking can be enabled with: 42 # zstyle ':completion:*:*:docker:*' option-stacking yes 43 # zstyle ':completion:*:*:docker-*:*' option-stacking yes 44 __docker_arguments() { 45 if zstyle -t ":completion:${curcontext}:" option-stacking; then 46 print -- -s 47 fi 48 } 49 50 __docker_get_containers() { 51 [[ $PREFIX = -* ]] && return 1 52 integer ret=1 53 local kind type line s 54 declare -a running stopped lines args names 55 56 kind=$1; shift 57 type=$1; shift 58 [[ $kind = (stopped|all) ]] && args=($args -a) 59 60 lines=(${(f)${:-"$(_call_program commands docker $docker_options ps --format 'table' --no-trunc $args)"$'\n'}}) 61 62 # Parse header line to find columns 63 local i=1 j=1 k header=${lines[1]} 64 declare -A begin end 65 while (( j < ${#header} - 1 )); do 66 i=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 1 )) 67 j=$(( i + ${${header[$i,-1]}[(i) ]} - 1 )) 68 k=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 2 )) 69 begin[${header[$i,$((j-1))]}]=$i 70 end[${header[$i,$((j-1))]}]=$k 71 done 72 end[${header[$i,$((j-1))]}]=-1 # Last column, should go to the end of the line 73 lines=(${lines[2,-1]}) 74 75 # Container ID 76 if [[ $type = (ids|all) ]]; then 77 for line in $lines; do 78 s="${${line[${begin[CONTAINER ID]},${end[CONTAINER ID]}]%% ##}[0,12]}" 79 s="$s:${(l:15:: :::)${${line[${begin[CREATED]},${end[CREATED]}]/ ago/}%% ##}}" 80 s="$s, ${${${line[${begin[IMAGE]},${end[IMAGE]}]}/:/\\:}%% ##}" 81 if [[ ${line[${begin[STATUS]},${end[STATUS]}]} = Exit* ]]; then 82 stopped=($stopped $s) 83 else 84 running=($running $s) 85 fi 86 done 87 fi 88 89 # Names: we only display the one without slash. All other names 90 # are generated and may clutter the completion. However, with 91 # Swarm, all names may be prefixed by the swarm node name. 92 if [[ $type = (names|all) ]]; then 93 for line in $lines; do 94 names=(${(ps:,:)${${line[${begin[NAMES]},${end[NAMES]}]}%% *}}) 95 # First step: find a common prefix and strip it (swarm node case) 96 (( ${#${(u)names%%/*}} == 1 )) && names=${names#${names[1]%%/*}/} 97 # Second step: only keep the first name without a / 98 s=${${names:#*/*}[1]} 99 # If no name, well give up. 100 (( $#s != 0 )) || continue 101 s="$s:${(l:15:: :::)${${line[${begin[CREATED]},${end[CREATED]}]/ ago/}%% ##}}" 102 s="$s, ${${${line[${begin[IMAGE]},${end[IMAGE]}]}/:/\\:}%% ##}" 103 if [[ ${line[${begin[STATUS]},${end[STATUS]}]} = Exit* ]]; then 104 stopped=($stopped $s) 105 else 106 running=($running $s) 107 fi 108 done 109 fi 110 111 [[ $kind = (running|all) ]] && _describe -t containers-running "running containers" running "$@" && ret=0 112 [[ $kind = (stopped|all) ]] && _describe -t containers-stopped "stopped containers" stopped "$@" && ret=0 113 return ret 114 } 115 116 __docker_complete_stopped_containers() { 117 [[ $PREFIX = -* ]] && return 1 118 __docker_get_containers stopped all "$@" 119 } 120 121 __docker_complete_running_containers() { 122 [[ $PREFIX = -* ]] && return 1 123 __docker_get_containers running all "$@" 124 } 125 126 __docker_complete_containers() { 127 [[ $PREFIX = -* ]] && return 1 128 __docker_get_containers all all "$@" 129 } 130 131 __docker_complete_containers_ids() { 132 [[ $PREFIX = -* ]] && return 1 133 __docker_get_containers all ids "$@" 134 } 135 136 __docker_complete_containers_names() { 137 [[ $PREFIX = -* ]] && return 1 138 __docker_get_containers all names "$@" 139 } 140 141 __docker_complete_info_plugins() { 142 [[ $PREFIX = -* ]] && return 1 143 integer ret=1 144 emulate -L zsh 145 setopt extendedglob 146 local -a plugins 147 plugins=(${(ps: :)${(M)${(f)${${"$(_call_program commands docker $docker_options info)"##*$'\n'Plugins:}%%$'\n'^ *}}:# $1: *}## $1: }) 148 _describe -t plugins "$1 plugins" plugins && ret=0 149 return ret 150 } 151 152 __docker_complete_images() { 153 [[ $PREFIX = -* ]] && return 1 154 integer ret=1 155 declare -a images 156 images=(${${${(f)${:-"$(_call_program commands docker $docker_options images)"$'\n'}}[2,-1]}/(#b)([^ ]##) ##([^ ]##) ##([^ ]##)*/${match[3]}:${(r:15:: :::)match[2]} in ${match[1]}}) 157 _describe -t docker-images "images" images && ret=0 158 __docker_complete_repositories_with_tags && ret=0 159 return ret 160 } 161 162 __docker_complete_repositories() { 163 [[ $PREFIX = -* ]] && return 1 164 integer ret=1 165 declare -a repos 166 repos=(${${${(f)${:-"$(_call_program commands docker $docker_options images)"$'\n'}}%% *}[2,-1]}) 167 repos=(${repos#<none>}) 168 _describe -t docker-repos "repositories" repos && ret=0 169 return ret 170 } 171 172 __docker_complete_repositories_with_tags() { 173 [[ $PREFIX = -* ]] && return 1 174 integer ret=1 175 declare -a repos onlyrepos matched 176 declare m 177 repos=(${${${${(f)${:-"$(_call_program commands docker $docker_options images)"$'\n'}}[2,-1]}/ ##/:::}%% *}) 178 repos=(${${repos%:::<none>}#<none>}) 179 # Check if we have a prefix-match for the current prefix. 180 onlyrepos=(${repos%::*}) 181 for m in $onlyrepos; do 182 [[ ${PREFIX##${~~m}} != ${PREFIX} ]] && { 183 # Yes, complete with tags 184 repos=(${${repos/:::/:}/:/\\:}) 185 _describe -t docker-repos-with-tags "repositories with tags" repos && ret=0 186 return ret 187 } 188 done 189 # No, only complete repositories 190 onlyrepos=(${${repos%:::*}/:/\\:}) 191 _describe -t docker-repos "repositories" onlyrepos -qS : && ret=0 192 193 return ret 194 } 195 196 __docker_search() { 197 [[ $PREFIX = -* ]] && return 1 198 local cache_policy 199 zstyle -s ":completion:${curcontext}:" cache-policy cache_policy 200 if [[ -z "$cache_policy" ]]; then 201 zstyle ":completion:${curcontext}:" cache-policy __docker_caching_policy 202 fi 203 204 local searchterm cachename 205 searchterm="${words[$CURRENT]%/}" 206 cachename=_docker-search-$searchterm 207 208 local expl 209 local -a result 210 if ( [[ ${(P)+cachename} -eq 0 ]] || _cache_invalid ${cachename#_} ) \ 211 && ! _retrieve_cache ${cachename#_}; then 212 _message "Searching for ${searchterm}..." 213 result=(${${${(f)${:-"$(_call_program commands docker $docker_options search $searchterm)"$'\n'}}%% *}[2,-1]}) 214 _store_cache ${cachename#_} result 215 fi 216 _wanted dockersearch expl 'available images' compadd -a result 217 } 218 219 __docker_get_log_options() { 220 [[ $PREFIX = -* ]] && return 1 221 222 integer ret=1 223 local log_driver=${opt_args[--log-driver]:-"all"} 224 local -a common_options awslogs_options fluentd_options gelf_options journald_options json_file_options logentries_options syslog_options splunk_options 225 226 common_options=("max-buffer-size" "mode") 227 awslogs_options=($common_options "awslogs-region" "awslogs-group" "awslogs-stream" "awslogs-create-group") 228 fluentd_options=($common_options "env" "fluentd-address" "fluentd-async-connect" "fluentd-buffer-limit" "fluentd-retry-wait" "fluentd-max-retries" "labels" "tag") 229 gcplogs_options=($common_options "env" "gcp-log-cmd" "gcp-project" "labels") 230 gelf_options=($common_options "env" "gelf-address" "gelf-compression-level" "gelf-compression-type" "labels" "tag") 231 journald_options=($common_options "env" "labels" "tag") 232 json_file_options=($common_options "env" "labels" "max-file" "max-size") 233 logentries_options=($common_options "logentries-token") 234 syslog_options=($common_options "env" "labels" "syslog-address" "syslog-facility" "syslog-format" "syslog-tls-ca-cert" "syslog-tls-cert" "syslog-tls-key" "syslog-tls-skip-verify" "tag") 235 splunk_options=($common_options "env" "labels" "splunk-caname" "splunk-capath" "splunk-format" "splunk-gzip" "splunk-gzip-level" "splunk-index" "splunk-insecureskipverify" "splunk-source" "splunk-sourcetype" "splunk-token" "splunk-url" "splunk-verify-connection" "tag") 236 237 [[ $log_driver = (awslogs|all) ]] && _describe -t awslogs-options "awslogs options" awslogs_options "$@" && ret=0 238 [[ $log_driver = (fluentd|all) ]] && _describe -t fluentd-options "fluentd options" fluentd_options "$@" && ret=0 239 [[ $log_driver = (gcplogs|all) ]] && _describe -t gcplogs-options "gcplogs options" gcplogs_options "$@" && ret=0 240 [[ $log_driver = (gelf|all) ]] && _describe -t gelf-options "gelf options" gelf_options "$@" && ret=0 241 [[ $log_driver = (journald|all) ]] && _describe -t journald-options "journald options" journald_options "$@" && ret=0 242 [[ $log_driver = (json-file|all) ]] && _describe -t json-file-options "json-file options" json_file_options "$@" && ret=0 243 [[ $log_driver = (logentries|all) ]] && _describe -t logentries-options "logentries options" logentries_options "$@" && ret=0 244 [[ $log_driver = (syslog|all) ]] && _describe -t syslog-options "syslog options" syslog_options "$@" && ret=0 245 [[ $log_driver = (splunk|all) ]] && _describe -t splunk-options "splunk options" splunk_options "$@" && ret=0 246 247 return ret 248 } 249 250 __docker_complete_log_drivers() { 251 [[ $PREFIX = -* ]] && return 1 252 integer ret=1 253 drivers=(awslogs etwlogs fluentd gcplogs gelf journald json-file none splunk syslog) 254 _describe -t log-drivers "log drivers" drivers && ret=0 255 return ret 256 } 257 258 __docker_complete_log_options() { 259 [[ $PREFIX = -* ]] && return 1 260 integer ret=1 261 262 if compset -P '*='; then 263 case "${${words[-1]%=*}#*=}" in 264 (syslog-format) 265 local opts=('rfc3164' 'rfc5424' 'rfc5424micro') 266 _describe -t syslog-format-opts "syslog format options" opts && ret=0 267 ;; 268 (mode) 269 local opts=('blocking' 'non-blocking') 270 _describe -t mode-opts "mode options" opts && ret=0 271 ;; 272 *) 273 _message 'value' && ret=0 274 ;; 275 esac 276 else 277 __docker_get_log_options -qS "=" && ret=0 278 fi 279 280 return ret 281 } 282 283 __docker_complete_detach_keys() { 284 [[ $PREFIX = -* ]] && return 1 285 integer ret=1 286 287 compset -P "*," 288 keys=(${:-{a-z}}) 289 ctrl_keys=(${:-ctrl-{{a-z},{@,'[','\\','^',']',_}}}) 290 _describe -t detach_keys "[a-z]" keys -qS "," && ret=0 291 _describe -t detach_keys-ctrl "'ctrl-' + 'a-z @ [ \\\\ ] ^ _'" ctrl_keys -qS "," && ret=0 292 } 293 294 __docker_complete_pid() { 295 [[ $PREFIX = -* ]] && return 1 296 integer ret=1 297 local -a opts vopts 298 299 opts=('host') 300 vopts=('container') 301 302 if compset -P '*:'; then 303 case "${${words[-1]%:*}#*=}" in 304 (container) 305 __docker_complete_running_containers && ret=0 306 ;; 307 *) 308 _message 'value' && ret=0 309 ;; 310 esac 311 else 312 _describe -t pid-value-opts "PID Options with value" vopts -qS ":" && ret=0 313 _describe -t pid-opts "PID Options" opts && ret=0 314 fi 315 316 return ret 317 } 318 319 __docker_complete_runtimes() { 320 [[ $PREFIX = -* ]] && return 1 321 integer ret=1 322 323 emulate -L zsh 324 setopt extendedglob 325 local -a runtimes_opts 326 runtimes_opts=(${(ps: :)${(f)${${"$(_call_program commands docker $docker_options info)"##*$'\n'Runtimes: }%%$'\n'^ *}}}) 327 _describe -t runtimes-opts "runtimes options" runtimes_opts && ret=0 328 } 329 330 __docker_complete_ps_filters() { 331 [[ $PREFIX = -* ]] && return 1 332 integer ret=1 333 334 if compset -P '*='; then 335 case "${${words[-1]%=*}#*=}" in 336 (ancestor) 337 __docker_complete_images && ret=0 338 ;; 339 (before|since) 340 __docker_complete_containers && ret=0 341 ;; 342 (health) 343 health_opts=('healthy' 'none' 'starting' 'unhealthy') 344 _describe -t health-filter-opts "health filter options" health_opts && ret=0 345 ;; 346 (id) 347 __docker_complete_containers_ids && ret=0 348 ;; 349 (is-task) 350 _describe -t boolean-filter-opts "filter options" boolean_opts && ret=0 351 ;; 352 (name) 353 __docker_complete_containers_names && ret=0 354 ;; 355 (network) 356 __docker_complete_networks && ret=0 357 ;; 358 (status) 359 status_opts=('created' 'dead' 'exited' 'paused' 'restarting' 'running' 'removing') 360 _describe -t status-filter-opts "status filter options" status_opts && ret=0 361 ;; 362 (volume) 363 __docker_complete_volumes && ret=0 364 ;; 365 *) 366 _message 'value' && ret=0 367 ;; 368 esac 369 else 370 opts=('ancestor' 'before' 'exited' 'expose' 'health' 'id' 'label' 'name' 'network' 'publish' 'since' 'status' 'volume') 371 _describe -t filter-opts "Filter Options" opts -qS "=" && ret=0 372 fi 373 374 return ret 375 } 376 377 __docker_complete_search_filters() { 378 [[ $PREFIX = -* ]] && return 1 379 integer ret=1 380 declare -a boolean_opts opts 381 382 boolean_opts=('true' 'false') 383 opts=('is-automated' 'is-official' 'stars') 384 385 if compset -P '*='; then 386 case "${${words[-1]%=*}#*=}" in 387 (is-automated|is-official) 388 _describe -t boolean-filter-opts "filter options" boolean_opts && ret=0 389 ;; 390 *) 391 _message 'value' && ret=0 392 ;; 393 esac 394 else 395 _describe -t filter-opts "filter options" opts -qS "=" && ret=0 396 fi 397 398 return ret 399 } 400 401 __docker_complete_images_filters() { 402 [[ $PREFIX = -* ]] && return 1 403 integer ret=1 404 declare -a boolean_opts opts 405 406 boolean_opts=('true' 'false') 407 opts=('before' 'dangling' 'label' 'reference' 'since') 408 409 if compset -P '*='; then 410 case "${${words[-1]%=*}#*=}" in 411 (before|reference|since) 412 __docker_complete_images && ret=0 413 ;; 414 (dangling) 415 _describe -t boolean-filter-opts "filter options" boolean_opts && ret=0 416 ;; 417 *) 418 _message 'value' && ret=0 419 ;; 420 esac 421 else 422 _describe -t filter-opts "Filter Options" opts -qS "=" && ret=0 423 fi 424 425 return ret 426 } 427 428 __docker_complete_events_filter() { 429 [[ $PREFIX = -* ]] && return 1 430 integer ret=1 431 declare -a opts 432 433 opts=('container' 'daemon' 'event' 'image' 'label' 'network' 'type' 'volume') 434 435 if compset -P '*='; then 436 case "${${words[-1]%=*}#*=}" in 437 (container) 438 __docker_complete_containers && ret=0 439 ;; 440 (daemon) 441 emulate -L zsh 442 setopt extendedglob 443 local -a daemon_opts 444 daemon_opts=( 445 ${(f)${${"$(_call_program commands docker $docker_options info)"##*$'\n'Name: }%%$'\n'^ *}} 446 ${${(f)${${"$(_call_program commands docker $docker_options info)"##*$'\n'ID: }%%$'\n'^ *}}//:/\\:} 447 ) 448 _describe -t daemon-filter-opts "daemon filter options" daemon_opts && ret=0 449 ;; 450 (event) 451 local -a event_opts 452 event_opts=('attach' 'commit' 'connect' 'copy' 'create' 'delete' 'destroy' 'detach' 'die' 'disconnect' 'exec_create' 'exec_detach' 453 'exec_start' 'export' 'health_status' 'import' 'kill' 'load' 'mount' 'oom' 'pause' 'pull' 'push' 'reload' 'rename' 'resize' 'restart' 'save' 'start' 454 'stop' 'tag' 'top' 'unmount' 'unpause' 'untag' 'update') 455 _describe -t event-filter-opts "event filter options" event_opts && ret=0 456 ;; 457 (image) 458 __docker_complete_images && ret=0 459 ;; 460 (network) 461 __docker_complete_networks && ret=0 462 ;; 463 (type) 464 local -a type_opts 465 type_opts=('container' 'daemon' 'image' 'network' 'volume') 466 _describe -t type-filter-opts "type filter options" type_opts && ret=0 467 ;; 468 (volume) 469 __docker_complete_volumes && ret=0 470 ;; 471 *) 472 _message 'value' && ret=0 473 ;; 474 esac 475 else 476 _describe -t filter-opts "filter options" opts -qS "=" && ret=0 477 fi 478 479 return ret 480 } 481 482 __docker_complete_prune_filters() { 483 [[ $PREFIX = -* ]] && return 1 484 integer ret=1 485 declare -a opts 486 487 opts=('until') 488 489 if compset -P '*='; then 490 case "${${words[-1]%=*}#*=}" in 491 *) 492 _message 'value' && ret=0 493 ;; 494 esac 495 else 496 _describe -t filter-opts "filter options" opts -qS "=" && ret=0 497 fi 498 499 return ret 500 } 501 502 # BO checkpoint 503 504 __docker_checkpoint_commands() { 505 local -a _docker_checkpoint_subcommands 506 _docker_checkpoint_subcommands=( 507 "create:Create a checkpoint from a running container" 508 "ls:List checkpoints for a container" 509 "rm:Remove a checkpoint" 510 ) 511 _describe -t docker-checkpoint-commands "docker checkpoint command" _docker_checkpoint_subcommands 512 } 513 514 __docker_checkpoint_subcommand() { 515 local -a _command_args opts_help 516 local expl help="--help" 517 integer ret=1 518 519 opts_help=("(: -)--help[Print usage]") 520 521 case "$words[1]" in 522 (create) 523 _arguments $(__docker_arguments) \ 524 $opts_help \ 525 "($help)--checkpoint-dir=[Use a custom checkpoint storage directory]:dir:_directories" \ 526 "($help)--leave-running[Leave the container running after checkpoint]" \ 527 "($help -)1:container:__docker_complete_running_containers" \ 528 "($help -)2:checkpoint: " && ret=0 529 ;; 530 (ls|list) 531 _arguments $(__docker_arguments) \ 532 $opts_help \ 533 "($help)--checkpoint-dir=[Use a custom checkpoint storage directory]:dir:_directories" \ 534 "($help -)1:container:__docker_complete_containers" && ret=0 535 ;; 536 (rm|remove) 537 _arguments $(__docker_arguments) \ 538 $opts_help \ 539 "($help)--checkpoint-dir=[Use a custom checkpoint storage directory]:dir:_directories" \ 540 "($help -)1:container:__docker_complete_containers" \ 541 "($help -)2:checkpoint: " && ret=0 542 ;; 543 (help) 544 _arguments $(__docker_arguments) ":subcommand:__docker_checkpoint_commands" && ret=0 545 ;; 546 esac 547 548 return ret 549 } 550 551 # EO checkpoint 552 553 # BO container 554 555 __docker_container_commands() { 556 local -a _docker_container_subcommands 557 _docker_container_subcommands=( 558 "attach:Attach to a running container" 559 "commit:Create a new image from a container's changes" 560 "cp:Copy files/folders between a container and the local filesystem" 561 "create:Create a new container" 562 "diff:Inspect changes on a container's filesystem" 563 "exec:Run a command in a running container" 564 "export:Export a container's filesystem as a tar archive" 565 "inspect:Display detailed information on one or more containers" 566 "kill:Kill one or more running containers" 567 "logs:Fetch the logs of a container" 568 "ls:List containers" 569 "pause:Pause all processes within one or more containers" 570 "port:List port mappings or a specific mapping for the container" 571 "prune:Remove all stopped containers" 572 "rename:Rename a container" 573 "restart:Restart one or more containers" 574 "rm:Remove one or more containers" 575 "run:Run a command in a new container" 576 "start:Start one or more stopped containers" 577 "stats:Display a live stream of container(s) resource usage statistics" 578 "stop:Stop one or more running containers" 579 "top:Display the running processes of a container" 580 "unpause:Unpause all processes within one or more containers" 581 "update:Update configuration of one or more containers" 582 "wait:Block until one or more containers stop, then print their exit codes" 583 ) 584 _describe -t docker-container-commands "docker container command" _docker_container_subcommands 585 } 586 587 __docker_container_subcommand() { 588 local -a _command_args opts_help opts_attach_exec_run_start opts_create_run opts_create_run_update 589 local expl help="--help" 590 integer ret=1 591 592 opts_attach_exec_run_start=( 593 "($help)--detach-keys=[Escape key sequence used to detach a container]:sequence:__docker_complete_detach_keys" 594 ) 595 opts_create_run=( 596 "($help -a --attach)"{-a=,--attach=}"[Attach to stdin, stdout or stderr]:device:(STDIN STDOUT STDERR)" 597 "($help)*--add-host=[Add a custom host-to-IP mapping]:host\:ip mapping: " 598 "($help)*--blkio-weight-device=[Block IO (relative device weight)]:device:Block IO weight: " 599 "($help)*--cap-add=[Add Linux capabilities]:capability: " 600 "($help)*--cap-drop=[Drop Linux capabilities]:capability: " 601 "($help)--cgroup-parent=[Parent cgroup for the container]:cgroup: " 602 "($help)--cidfile=[Write the container ID to the file]:CID file:_files" 603 "($help)--cpus=[Number of CPUs (default 0.000)]:cpus: " 604 "($help)*--device=[Add a host device to the container]:device:_files" 605 "($help)*--device-cgroup-rule=[Add a rule to the cgroup allowed devices list]:device:cgroup: " 606 "($help)*--device-read-bps=[Limit the read rate (bytes per second) from a device]:device:IO rate: " 607 "($help)*--device-read-iops=[Limit the read rate (IO per second) from a device]:device:IO rate: " 608 "($help)*--device-write-bps=[Limit the write rate (bytes per second) to a device]:device:IO rate: " 609 "($help)*--device-write-iops=[Limit the write rate (IO per second) to a device]:device:IO rate: " 610 "($help)--disable-content-trust[Skip image verification]" 611 "($help)*--dns=[Custom DNS servers]:DNS server: " 612 "($help)*--dns-option=[Custom DNS options]:DNS option: " 613 "($help)*--dns-search=[Custom DNS search domains]:DNS domains: " 614 "($help)*"{-e=,--env=}"[Environment variables]:environment variable: " 615 "($help)--entrypoint=[Overwrite the default entrypoint of the image]:entry point: " 616 "($help)*--env-file=[Read environment variables from a file]:environment file:_files" 617 "($help)*--expose=[Expose a port from the container without publishing it]: " 618 "($help)*--group=[Set one or more supplementary user groups for the container]:group:_groups" 619 "($help -h --hostname)"{-h=,--hostname=}"[Container host name]:hostname:_hosts" 620 "($help -i --interactive)"{-i,--interactive}"[Keep stdin open even if not attached]" 621 "($help)--init[Run an init inside the container that forwards signals and reaps processes]" 622 "($help)--ip=[IPv4 address]:IPv4: " 623 "($help)--ip6=[IPv6 address]:IPv6: " 624 "($help)--ipc=[IPC namespace to use]:IPC namespace: " 625 "($help)--isolation=[Container isolation technology]:isolation:(default hyperv process)" 626 "($help)*--link=[Add link to another container]:link:->link" 627 "($help)*--link-local-ip=[Container IPv4/IPv6 link-local addresses]:IPv4/IPv6: " 628 "($help)*"{-l=,--label=}"[Container metadata]:label: " 629 "($help)--log-driver=[Default driver for container logs]:logging driver:__docker_complete_log_drivers" 630 "($help)*--log-opt=[Log driver specific options]:log driver options:__docker_complete_log_options" 631 "($help)--mac-address=[Container MAC address]:MAC address: " 632 "($help)--name=[Container name]:name: " 633 "($help)--network=[Connect a container to a network]:network mode:(bridge none container host)" 634 "($help)*--network-alias=[Add network-scoped alias for the container]:alias: " 635 "($help)--oom-kill-disable[Disable OOM Killer]" 636 "($help)--oom-score-adj[Tune the host's OOM preferences for containers (accepts -1000 to 1000)]" 637 "($help)--pids-limit[Tune container pids limit (set -1 for unlimited)]" 638 "($help -P --publish-all)"{-P,--publish-all}"[Publish all exposed ports]" 639 "($help)*"{-p=,--publish=}"[Expose a container's port to the host]:port:_ports" 640 "($help)--pid=[PID namespace to use]:PID namespace:__docker_complete_pid" 641 "($help)--privileged[Give extended privileges to this container]" 642 "($help)--read-only[Mount the container's root filesystem as read only]" 643 "($help)*--security-opt=[Security options]:security option: " 644 "($help)*--shm-size=[Size of '/dev/shm' (format is '<number><unit>')]:shm size: " 645 "($help)--stop-timeout=[Timeout (in seconds) to stop a container]:time: " 646 "($help)*--sysctl=-[sysctl options]:sysctl: " 647 "($help -t --tty)"{-t,--tty}"[Allocate a pseudo-tty]" 648 "($help -u --user)"{-u=,--user=}"[Username or UID]:user:_users" 649 "($help)*--ulimit=[ulimit options]:ulimit: " 650 "($help)--userns=[Container user namespace]:user namespace:(host)" 651 "($help)--tmpfs[mount tmpfs]" 652 "($help)*-v[Bind mount a volume]:volume: " 653 "($help)--volume-driver=[Optional volume driver for the container]:volume driver:(local)" 654 "($help)*--volumes-from=[Mount volumes from the specified container]:volume: " 655 "($help -w --workdir)"{-w=,--workdir=}"[Working directory inside the container]:directory:_directories" 656 ) 657 opts_create_run_update=( 658 "($help)--blkio-weight=[Block IO (relative weight), between 10 and 1000]:Block IO weight:(10 100 500 1000)" 659 "($help -c --cpu-shares)"{-c=,--cpu-shares=}"[CPU shares (relative weight)]:CPU shares:(0 10 100 200 500 800 1000)" 660 "($help)--cpu-period=[Limit the CPU CFS (Completely Fair Scheduler) period]:CPU period: " 661 "($help)--cpu-quota=[Limit the CPU CFS (Completely Fair Scheduler) quota]:CPU quota: " 662 "($help)--cpu-rt-period=[Limit the CPU real-time period]:CPU real-time period in microseconds: " 663 "($help)--cpu-rt-runtime=[Limit the CPU real-time runtime]:CPU real-time runtime in microseconds: " 664 "($help)--cpuset-cpus=[CPUs in which to allow execution]:CPUs: " 665 "($help)--cpuset-mems=[MEMs in which to allow execution]:MEMs: " 666 "($help)--kernel-memory=[Kernel memory limit in bytes]:Memory limit: " 667 "($help -m --memory)"{-m=,--memory=}"[Memory limit]:Memory limit: " 668 "($help)--memory-reservation=[Memory soft limit]:Memory limit: " 669 "($help)--memory-swap=[Total memory limit with swap]:Memory limit: " 670 "($help)--restart=[Restart policy]:restart policy:(no on-failure always unless-stopped)" 671 ) 672 opts_help=("(: -)--help[Print usage]") 673 674 case "$words[1]" in 675 (attach) 676 _arguments $(__docker_arguments) \ 677 $opts_help \ 678 $opts_attach_exec_run_start \ 679 "($help)--no-stdin[Do not attach stdin]" \ 680 "($help)--sig-proxy[Proxy all received signals to the process (non-TTY mode only)]" \ 681 "($help -):containers:__docker_complete_running_containers" && ret=0 682 ;; 683 (commit) 684 _arguments $(__docker_arguments) \ 685 $opts_help \ 686 "($help -a --author)"{-a=,--author=}"[Author]:author: " \ 687 "($help)*"{-c=,--change=}"[Apply Dockerfile instruction to the created image]:Dockerfile:_files" \ 688 "($help -m --message)"{-m=,--message=}"[Commit message]:message: " \ 689 "($help -p --pause)"{-p,--pause}"[Pause container during commit]" \ 690 "($help -):container:__docker_complete_containers" \ 691 "($help -): :__docker_complete_repositories_with_tags" && ret=0 692 ;; 693 (cp) 694 local state 695 _arguments $(__docker_arguments) \ 696 $opts_help \ 697 "($help -L --follow-link)"{-L,--follow-link}"[Always follow symbol link]" \ 698 "($help -)1:container:->container" \ 699 "($help -)2:hostpath:_files" && ret=0 700 case $state in 701 (container) 702 if compset -P "*:"; then 703 _files && ret=0 704 else 705 __docker_complete_containers -qS ":" && ret=0 706 fi 707 ;; 708 esac 709 ;; 710 (create) 711 local state 712 _arguments $(__docker_arguments) \ 713 $opts_help \ 714 $opts_create_run \ 715 $opts_create_run_update \ 716 "($help -): :__docker_complete_images" \ 717 "($help -):command: _command_names -e" \ 718 "($help -)*::arguments: _normal" && ret=0 719 case $state in 720 (link) 721 if compset -P "*:"; then 722 _wanted alias expl "Alias" compadd -E "" && ret=0 723 else 724 __docker_complete_running_containers -qS ":" && ret=0 725 fi 726 ;; 727 esac 728 ;; 729 (diff) 730 _arguments $(__docker_arguments) \ 731 $opts_help \ 732 "($help -)*:containers:__docker_complete_containers" && ret=0 733 ;; 734 (exec) 735 local state 736 _arguments $(__docker_arguments) \ 737 $opts_help \ 738 $opts_attach_exec_run_start \ 739 "($help -d --detach)"{-d,--detach}"[Detached mode: leave the container running in the background]" \ 740 "($help)*"{-e=,--env=}"[Set environment variables]:environment variable: " \ 741 "($help -i --interactive)"{-i,--interactive}"[Keep stdin open even if not attached]" \ 742 "($help)--privileged[Give extended Linux capabilities to the command]" \ 743 "($help -t --tty)"{-t,--tty}"[Allocate a pseudo-tty]" \ 744 "($help -u --user)"{-u=,--user=}"[Username or UID]:user:_users" \ 745 "($help -):containers:__docker_complete_running_containers" \ 746 "($help -)*::command:->anycommand" && ret=0 747 case $state in 748 (anycommand) 749 shift 1 words 750 (( CURRENT-- )) 751 _normal && ret=0 752 ;; 753 esac 754 ;; 755 (export) 756 _arguments $(__docker_arguments) \ 757 $opts_help \ 758 "($help -o --output)"{-o=,--output=}"[Write to a file, instead of stdout]:output file:_files" \ 759 "($help -)*:containers:__docker_complete_containers" && ret=0 760 ;; 761 (inspect) 762 _arguments $(__docker_arguments) \ 763 $opts_help \ 764 "($help -f --format)"{-f=,--format=}"[Format the output using the given go template]:template: " \ 765 "($help -s --size)"{-s,--size}"[Display total file sizes]" \ 766 "($help -)*:containers:__docker_complete_containers" && ret=0 767 ;; 768 (kill) 769 _arguments $(__docker_arguments) \ 770 $opts_help \ 771 "($help -s --signal)"{-s=,--signal=}"[Signal to send]:signal:_signals" \ 772 "($help -)*:containers:__docker_complete_running_containers" && ret=0 773 ;; 774 (logs) 775 _arguments $(__docker_arguments) \ 776 $opts_help \ 777 "($help)--details[Show extra details provided to logs]" \ 778 "($help -f --follow)"{-f,--follow}"[Follow log output]" \ 779 "($help -s --since)"{-s=,--since=}"[Show logs since this timestamp]:timestamp: " \ 780 "($help -t --timestamps)"{-t,--timestamps}"[Show timestamps]" \ 781 "($help)--tail=[Output the last K lines]:lines:(1 10 20 50 all)" \ 782 "($help -)*:containers:__docker_complete_containers" && ret=0 783 ;; 784 (ls|list) 785 _arguments $(__docker_arguments) \ 786 $opts_help \ 787 "($help -a --all)"{-a,--all}"[Show all containers]" \ 788 "($help)--before=[Show only container created before...]:containers:__docker_complete_containers" \ 789 "($help)*"{-f=,--filter=}"[Filter values]:filter:__docker_complete_ps_filters" \ 790 "($help)--format=[Pretty-print containers using a Go template]:template: " \ 791 "($help -l --latest)"{-l,--latest}"[Show only the latest created container]" \ 792 "($help -n --last)"{-n=,--last=}"[Show n last created containers (includes all states)]:n:(1 5 10 25 50)" \ 793 "($help)--no-trunc[Do not truncate output]" \ 794 "($help -q --quiet)"{-q,--quiet}"[Only show numeric IDs]" \ 795 "($help -s --size)"{-s,--size}"[Display total file sizes]" \ 796 "($help)--since=[Show only containers created since...]:containers:__docker_complete_containers" && ret=0 797 ;; 798 (pause|unpause) 799 _arguments $(__docker_arguments) \ 800 $opts_help \ 801 "($help -)*:containers:__docker_complete_running_containers" && ret=0 802 ;; 803 (port) 804 _arguments $(__docker_arguments) \ 805 $opts_help \ 806 "($help -)1:containers:__docker_complete_running_containers" \ 807 "($help -)2:port:_ports" && ret=0 808 ;; 809 (prune) 810 _arguments $(__docker_arguments) \ 811 $opts_help \ 812 "($help)*--filter=[Filter values]:filter:__docker_complete_prune_filters" \ 813 "($help -f --force)"{-f,--force}"[Do not prompt for confirmation]" && ret=0 814 ;; 815 (rename) 816 _arguments $(__docker_arguments) \ 817 $opts_help \ 818 "($help -):old name:__docker_complete_containers" \ 819 "($help -):new name: " && ret=0 820 ;; 821 (restart) 822 _arguments $(__docker_arguments) \ 823 $opts_help \ 824 "($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)" \ 825 "($help -)*:containers:__docker_complete_containers_ids" && ret=0 826 ;; 827 (rm) 828 local state 829 _arguments $(__docker_arguments) \ 830 $opts_help \ 831 "($help -f --force)"{-f,--force}"[Force removal]" \ 832 "($help -l --link)"{-l,--link}"[Remove the specified link and not the underlying container]" \ 833 "($help -v --volumes)"{-v,--volumes}"[Remove the volumes associated to the container]" \ 834 "($help -)*:containers:->values" && ret=0 835 case $state in 836 (values) 837 if [[ ${words[(r)-f]} == -f || ${words[(r)--force]} == --force ]]; then 838 __docker_complete_containers && ret=0 839 else 840 __docker_complete_stopped_containers && ret=0 841 fi 842 ;; 843 esac 844 ;; 845 (run) 846 local state 847 _arguments $(__docker_arguments) \ 848 $opts_help \ 849 $opts_create_run \ 850 $opts_create_run_update \ 851 $opts_attach_exec_run_start \ 852 "($help -d --detach)"{-d,--detach}"[Detached mode: leave the container running in the background]" \ 853 "($help)--health-cmd=[Command to run to check health]:command: " \ 854 "($help)--health-interval=[Time between running the check]:time: " \ 855 "($help)--health-retries=[Consecutive failures needed to report unhealthy]:retries:(1 2 3 4 5)" \ 856 "($help)--health-timeout=[Maximum time to allow one check to run]:time: " \ 857 "($help)--no-healthcheck[Disable any container-specified HEALTHCHECK]" \ 858 "($help)--rm[Remove intermediate containers when it exits]" \ 859 "($help)--runtime=[Name of the runtime to be used for that container]:runtime:__docker_complete_runtimes" \ 860 "($help)--sig-proxy[Proxy all received signals to the process (non-TTY mode only)]" \ 861 "($help)--stop-signal=[Signal to kill a container]:signal:_signals" \ 862 "($help)--storage-opt=[Storage driver options for the container]:storage options:->storage-opt" \ 863 "($help -): :__docker_complete_images" \ 864 "($help -):command: _command_names -e" \ 865 "($help -)*::arguments: _normal" && ret=0 866 case $state in 867 (link) 868 if compset -P "*:"; then 869 _wanted alias expl "Alias" compadd -E "" && ret=0 870 else 871 __docker_complete_running_containers -qS ":" && ret=0 872 fi 873 ;; 874 (storage-opt) 875 if compset -P "*="; then 876 _message "value" && ret=0 877 else 878 opts=('size') 879 _describe -t filter-opts "storage options" opts -qS "=" && ret=0 880 fi 881 ;; 882 esac 883 ;; 884 (start) 885 _arguments $(__docker_arguments) \ 886 $opts_help \ 887 $opts_attach_exec_run_start \ 888 "($help -a --attach)"{-a,--attach}"[Attach container's stdout/stderr and forward all signals]" \ 889 "($help -i --interactive)"{-i,--interactive}"[Attach container's stding]" \ 890 "($help -)*:containers:__docker_complete_stopped_containers" && ret=0 891 ;; 892 (stats) 893 _arguments $(__docker_arguments) \ 894 $opts_help \ 895 "($help -a --all)"{-a,--all}"[Show all containers (default shows just running)]" \ 896 "($help)--format=[Pretty-print images using a Go template]:template: " \ 897 "($help)--no-stream[Disable streaming stats and only pull the first result]" \ 898 "($help -)*:containers:__docker_complete_running_containers" && ret=0 899 ;; 900 (stop) 901 _arguments $(__docker_arguments) \ 902 $opts_help \ 903 "($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)" \ 904 "($help -)*:containers:__docker_complete_running_containers" && ret=0 905 ;; 906 (top) 907 local state 908 _arguments $(__docker_arguments) \ 909 $opts_help \ 910 "($help -)1:containers:__docker_complete_running_containers" \ 911 "($help -)*:: :->ps-arguments" && ret=0 912 case $state in 913 (ps-arguments) 914 _ps && ret=0 915 ;; 916 esac 917 ;; 918 (update) 919 local state 920 _arguments $(__docker_arguments) \ 921 $opts_help \ 922 opts_create_run_update \ 923 "($help -)*: :->values" && ret=0 924 case $state in 925 (values) 926 if [[ ${words[(r)--kernel-memory*]} = (--kernel-memory*) ]]; then 927 __docker_complete_stopped_containers && ret=0 928 else 929 __docker_complete_containers && ret=0 930 fi 931 ;; 932 esac 933 ;; 934 (wait) 935 _arguments $(__docker_arguments) \ 936 $opts_help \ 937 "($help -)*:containers:__docker_complete_running_containers" && ret=0 938 ;; 939 (help) 940 _arguments $(__docker_arguments) ":subcommand:__docker_container_commands" && ret=0 941 ;; 942 esac 943 944 return ret 945 } 946 947 # EO container 948 949 # BO image 950 951 __docker_image_commands() { 952 local -a _docker_image_subcommands 953 _docker_image_subcommands=( 954 "build:Build an image from a Dockerfile" 955 "history:Show the history of an image" 956 "import:Import the contents from a tarball to create a filesystem image" 957 "inspect:Display detailed information on one or more images" 958 "load:Load an image from a tar archive or STDIN" 959 "ls:List images" 960 "prune:Remove unused images" 961 "pull:Pull an image or a repository from a registry" 962 "push:Push an image or a repository to a registry" 963 "rm:Remove one or more images" 964 "save:Save one or more images to a tar archive (streamed to STDOUT by default)" 965 "tag:Tag an image into a repository" 966 ) 967 _describe -t docker-image-commands "docker image command" _docker_image_subcommands 968 } 969 970 __docker_image_subcommand() { 971 local -a _command_args opts_help 972 local expl help="--help" 973 integer ret=1 974 975 opts_help=("(: -)--help[Print usage]") 976 977 case "$words[1]" in 978 (build) 979 _arguments $(__docker_arguments) \ 980 $opts_help \ 981 "($help)*--build-arg=[Build-time variables]:<varname>=<value>: " \ 982 "($help)*--cache-from=[Images to consider as cache sources]: :__docker_complete_repositories_with_tags" \ 983 "($help -c --cpu-shares)"{-c=,--cpu-shares=}"[CPU shares (relative weight)]:CPU shares:(0 10 100 200 500 800 1000)" \ 984 "($help)--cgroup-parent=[Parent cgroup for the container]:cgroup: " \ 985 "($help)--compress[Compress the build context using gzip]" \ 986 "($help)--cpu-period=[Limit the CPU CFS (Completely Fair Scheduler) period]:CPU period: " \ 987 "($help)--cpu-quota=[Limit the CPU CFS (Completely Fair Scheduler) quota]:CPU quota: " \ 988 "($help)--cpu-rt-period=[Limit the CPU real-time period]:CPU real-time period in microseconds: " \ 989 "($help)--cpu-rt-runtime=[Limit the CPU real-time runtime]:CPU real-time runtime in microseconds: " \ 990 "($help)--cpuset-cpus=[CPUs in which to allow execution]:CPUs: " \ 991 "($help)--cpuset-mems=[MEMs in which to allow execution]:MEMs: " \ 992 "($help)--disable-content-trust[Skip image verification]" \ 993 "($help -f --file)"{-f=,--file=}"[Name of the Dockerfile]:Dockerfile:_files" \ 994 "($help)--force-rm[Always remove intermediate containers]" \ 995 "($help)--isolation=[Container isolation technology]:isolation:(default hyperv process)" \ 996 "($help)*--label=[Set metadata for an image]:label=value: " \ 997 "($help -m --memory)"{-m=,--memory=}"[Memory limit]:Memory limit: " \ 998 "($help)--memory-swap=[Total memory limit with swap]:Memory limit: " \ 999 "($help)--network=[Connect a container to a network]:network mode:(bridge none container host)" \ 1000 "($help)--no-cache[Do not use cache when building the image]" \ 1001 "($help)--pull[Attempt to pull a newer version of the image]" \ 1002 "($help -q --quiet)"{-q,--quiet}"[Suppress verbose build output]" \ 1003 "($help)--rm[Remove intermediate containers after a successful build]" \ 1004 "($help)*--shm-size=[Size of '/dev/shm' (format is '<number><unit>')]:shm size: " \ 1005 "($help)--squash[Squash newly built layers into a single new layer]" \ 1006 "($help -t --tag)*"{-t=,--tag=}"[Repository, name and tag for the image]: :__docker_complete_repositories_with_tags" \ 1007 "($help)*--ulimit=[ulimit options]:ulimit: " \ 1008 "($help)--userns=[Container user namespace]:user namespace:(host)" \ 1009 "($help -):path or URL:_directories" && ret=0 1010 ;; 1011 (history) 1012 _arguments $(__docker_arguments) \ 1013 $opts_help \ 1014 "($help -H --human)"{-H,--human}"[Print sizes and dates in human readable format]" \ 1015 "($help)--no-trunc[Do not truncate output]" \ 1016 "($help -q --quiet)"{-q,--quiet}"[Only show numeric IDs]" \ 1017 "($help -)*: :__docker_complete_images" && ret=0 1018 ;; 1019 (import) 1020 _arguments $(__docker_arguments) \ 1021 $opts_help \ 1022 "($help)*"{-c=,--change=}"[Apply Dockerfile instruction to the created image]:Dockerfile:_files" \ 1023 "($help -m --message)"{-m=,--message=}"[Commit message for imported image]:message: " \ 1024 "($help -):URL:(- http:// file://)" \ 1025 "($help -): :__docker_complete_repositories_with_tags" && ret=0 1026 ;; 1027 (inspect) 1028 _arguments $(__docker_arguments) \ 1029 $opts_help \ 1030 "($help -f --format)"{-f=,--format=}"[Format the output using the given go template]:template: " \ 1031 "($help -)*:images:__docker_complete_images" && ret=0 1032 ;; 1033 (load) 1034 _arguments $(__docker_arguments) \ 1035 $opts_help \ 1036 "($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))(-.)\"" \ 1037 "($help -q --quiet)"{-q,--quiet}"[Suppress the load output]" && ret=0 1038 ;; 1039 (ls|list) 1040 local state 1041 _arguments $(__docker_arguments) \ 1042 $opts_help \ 1043 "($help -a --all)"{-a,--all}"[Show all images]" \ 1044 "($help)--digests[Show digests]" \ 1045 "($help)*"{-f=,--filter=}"[Filter values]:filter:->filter-options" \ 1046 "($help)--format=[Pretty-print images using a Go template]:template: " \ 1047 "($help)--no-trunc[Do not truncate output]" \ 1048 "($help -q --quiet)"{-q,--quiet}"[Only show numeric IDs]" \ 1049 "($help -): :__docker_complete_repositories" && ret=0 1050 case $state in 1051 (filter-options) 1052 __docker_complete_images_filters && ret=0 1053 ;; 1054 esac 1055 ;; 1056 (prune) 1057 _arguments $(__docker_arguments) \ 1058 $opts_help \ 1059 "($help -a --all)"{-a,--all}"[Remove all unused images, not just dangling ones]" \ 1060 "($help)*--filter=[Filter values]:filter:__docker_complete_prune_filters" \ 1061 "($help -f --force)"{-f,--force}"[Do not prompt for confirmation]" && ret=0 1062 ;; 1063 (pull) 1064 _arguments $(__docker_arguments) \ 1065 $opts_help \ 1066 "($help -a --all-tags)"{-a,--all-tags}"[Download all tagged images]" \ 1067 "($help)--disable-content-trust[Skip image verification]" \ 1068 "($help -):name:__docker_search" && ret=0 1069 ;; 1070 (push) 1071 _arguments $(__docker_arguments) \ 1072 $opts_help \ 1073 "($help)--disable-content-trust[Skip image signing]" \ 1074 "($help -): :__docker_complete_images" && ret=0 1075 ;; 1076 (rm) 1077 _arguments $(__docker_arguments) \ 1078 $opts_help \ 1079 "($help -f --force)"{-f,--force}"[Force removal]" \ 1080 "($help)--no-prune[Do not delete untagged parents]" \ 1081 "($help -)*: :__docker_complete_images" && ret=0 1082 ;; 1083 (save) 1084 _arguments $(__docker_arguments) \ 1085 $opts_help \ 1086 "($help -o --output)"{-o=,--output=}"[Write to file]:file:_files" \ 1087 "($help -)*: :__docker_complete_images" && ret=0 1088 ;; 1089 (tag) 1090 _arguments $(__docker_arguments) \ 1091 $opts_help \ 1092 "($help -):source:__docker_complete_images"\ 1093 "($help -):destination:__docker_complete_repositories_with_tags" && ret=0 1094 ;; 1095 (help) 1096 _arguments $(__docker_arguments) ":subcommand:__docker_container_commands" && ret=0 1097 ;; 1098 esac 1099 1100 return ret 1101 } 1102 1103 # EO image 1104 1105 # BO network 1106 1107 __docker_network_complete_ls_filters() { 1108 [[ $PREFIX = -* ]] && return 1 1109 integer ret=1 1110 1111 if compset -P '*='; then 1112 case "${${words[-1]%=*}#*=}" in 1113 (driver) 1114 __docker_complete_info_plugins Network && ret=0 1115 ;; 1116 (id) 1117 __docker_complete_networks_ids && ret=0 1118 ;; 1119 (name) 1120 __docker_complete_networks_names && ret=0 1121 ;; 1122 (type) 1123 type_opts=('builtin' 'custom') 1124 _describe -t type-filter-opts "Type Filter Options" type_opts && ret=0 1125 ;; 1126 *) 1127 _message 'value' && ret=0 1128 ;; 1129 esac 1130 else 1131 opts=('driver' 'id' 'label' 'name' 'type') 1132 _describe -t filter-opts "Filter Options" opts -qS "=" && ret=0 1133 fi 1134 1135 return ret 1136 } 1137 1138 __docker_get_networks() { 1139 [[ $PREFIX = -* ]] && return 1 1140 integer ret=1 1141 local line s 1142 declare -a lines networks 1143 1144 type=$1; shift 1145 1146 lines=(${(f)${:-"$(_call_program commands docker $docker_options network ls)"$'\n'}}) 1147 1148 # Parse header line to find columns 1149 local i=1 j=1 k header=${lines[1]} 1150 declare -A begin end 1151 while (( j < ${#header} - 1 )); do 1152 i=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 1 )) 1153 j=$(( i + ${${header[$i,-1]}[(i) ]} - 1 )) 1154 k=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 2 )) 1155 begin[${header[$i,$((j-1))]}]=$i 1156 end[${header[$i,$((j-1))]}]=$k 1157 done 1158 end[${header[$i,$((j-1))]}]=-1 1159 lines=(${lines[2,-1]}) 1160 1161 # Network ID 1162 if [[ $type = (ids|all) ]]; then 1163 for line in $lines; do 1164 s="${line[${begin[NETWORK ID]},${end[NETWORK ID]}]%% ##}" 1165 s="$s:${(l:7:: :::)${${line[${begin[DRIVER]},${end[DRIVER]}]}%% ##}}" 1166 s="$s, ${${line[${begin[SCOPE]},${end[SCOPE]}]}%% ##}" 1167 networks=($networks $s) 1168 done 1169 fi 1170 1171 # Names 1172 if [[ $type = (names|all) ]]; then 1173 for line in $lines; do 1174 s="${line[${begin[NAME]},${end[NAME]}]%% ##}" 1175 s="$s:${(l:7:: :::)${${line[${begin[DRIVER]},${end[DRIVER]}]}%% ##}}" 1176 s="$s, ${${line[${begin[SCOPE]},${end[SCOPE]}]}%% ##}" 1177 networks=($networks $s) 1178 done 1179 fi 1180 1181 _describe -t networks-list "networks" networks "$@" && ret=0 1182 return ret 1183 } 1184 1185 __docker_complete_networks() { 1186 [[ $PREFIX = -* ]] && return 1 1187 __docker_get_networks all "$@" 1188 } 1189 1190 __docker_complete_networks_ids() { 1191 [[ $PREFIX = -* ]] && return 1 1192 __docker_get_networks ids "$@" 1193 } 1194 1195 __docker_complete_networks_names() { 1196 [[ $PREFIX = -* ]] && return 1 1197 __docker_get_networks names "$@" 1198 } 1199 1200 __docker_network_commands() { 1201 local -a _docker_network_subcommands 1202 _docker_network_subcommands=( 1203 "connect:Connect a container to a network" 1204 "create:Creates a new network with a name specified by the user" 1205 "disconnect:Disconnects a container from a network" 1206 "inspect:Displays detailed information on a network" 1207 "ls:Lists all the networks created by the user" 1208 "prune:Remove all unused networks" 1209 "rm:Deletes one or more networks" 1210 ) 1211 _describe -t docker-network-commands "docker network command" _docker_network_subcommands 1212 } 1213 1214 __docker_network_subcommand() { 1215 local -a _command_args opts_help 1216 local expl help="--help" 1217 integer ret=1 1218 1219 opts_help=("(: -)--help[Print usage]") 1220 1221 case "$words[1]" in 1222 (connect) 1223 _arguments $(__docker_arguments) \ 1224 $opts_help \ 1225 "($help)*--alias=[Add network-scoped alias for the container]:alias: " \ 1226 "($help)--ip=[IPv4 address]:IPv4: " \ 1227 "($help)--ip6=[IPv6 address]:IPv6: " \ 1228 "($help)*--link=[Add a link to another container]:link:->link" \ 1229 "($help)*--link-local-ip=[Add a link-local address for the container]:IPv4/IPv6: " \ 1230 "($help -)1:network:__docker_complete_networks" \ 1231 "($help -)2:containers:__docker_complete_containers" && ret=0 1232 1233 case $state in 1234 (link) 1235 if compset -P "*:"; then 1236 _wanted alias expl "Alias" compadd -E "" && ret=0 1237 else 1238 __docker_complete_running_containers -qS ":" && ret=0 1239 fi 1240 ;; 1241 esac 1242 ;; 1243 (create) 1244 _arguments $(__docker_arguments) -A '-*' \ 1245 $opts_help \ 1246 "($help)--attachable[Enable manual container attachment]" \ 1247 "($help)*--aux-address[Auxiliary IPv4 or IPv6 addresses used by network driver]:key=IP: " \ 1248 "($help -d --driver)"{-d=,--driver=}"[Driver to manage the Network]:driver:(null host bridge overlay)" \ 1249 "($help)*--gateway=[IPv4 or IPv6 Gateway for the master subnet]:IP: " \ 1250 "($help)--internal[Restricts external access to the network]" \ 1251 "($help)*--ip-range=[Allocate container ip from a sub-range]:IP/mask: " \ 1252 "($help)--ipam-driver=[IP Address Management Driver]:driver:(default)" \ 1253 "($help)*--ipam-opt=[Custom IPAM plugin options]:opt=value: " \ 1254 "($help)--ipv6[Enable IPv6 networking]" \ 1255 "($help)*--label=[Set metadata on a network]:label=value: " \ 1256 "($help)*"{-o=,--opt=}"[Driver specific options]:opt=value: " \ 1257 "($help)*--subnet=[Subnet in CIDR format that represents a network segment]:IP/mask: " \ 1258 "($help -)1:Network Name: " && ret=0 1259 ;; 1260 (disconnect) 1261 _arguments $(__docker_arguments) \ 1262 $opts_help \ 1263 "($help -)1:network:__docker_complete_networks" \ 1264 "($help -)2:containers:__docker_complete_containers" && ret=0 1265 ;; 1266 (inspect) 1267 _arguments $(__docker_arguments) \ 1268 $opts_help \ 1269 "($help -f --format)"{-f=,--format=}"[Format the output using the given go template]:template: " \ 1270 "($help -)*:network:__docker_complete_networks" && ret=0 1271 ;; 1272 (ls) 1273 _arguments $(__docker_arguments) \ 1274 $opts_help \ 1275 "($help)--no-trunc[Do not truncate the output]" \ 1276 "($help)*"{-f=,--filter=}"[Provide filter values]:filter:->filter-options" \ 1277 "($help)--format=[Pretty-print networks using a Go template]:template: " \ 1278 "($help -q --quiet)"{-q,--quiet}"[Only display numeric IDs]" && ret=0 1279 case $state in 1280 (filter-options) 1281 __docker_network_complete_ls_filters && ret=0 1282 ;; 1283 esac 1284 ;; 1285 (prune) 1286 _arguments $(__docker_arguments) \ 1287 $opts_help \ 1288 "($help)*--filter=[Filter values]:filter:__docker_complete_prune_filters" \ 1289 "($help -f --force)"{-f,--force}"[Do not prompt for confirmation]" && ret=0 1290 ;; 1291 (rm) 1292 _arguments $(__docker_arguments) \ 1293 $opts_help \ 1294 "($help -)*:network:__docker_complete_networks" && ret=0 1295 ;; 1296 (help) 1297 _arguments $(__docker_arguments) ":subcommand:__docker_network_commands" && ret=0 1298 ;; 1299 esac 1300 1301 return ret 1302 } 1303 1304 # EO network 1305 1306 # BO node 1307 1308 __docker_node_complete_ls_filters() { 1309 [[ $PREFIX = -* ]] && return 1 1310 integer ret=1 1311 1312 if compset -P '*='; then 1313 case "${${words[-1]%=*}#*=}" in 1314 (id) 1315 __docker_complete_nodes_ids && ret=0 1316 ;; 1317 (membership) 1318 membership_opts=('accepted' 'pending' 'rejected') 1319 _describe -t membership-opts "membership options" membership_opts && ret=0 1320 ;; 1321 (name) 1322 __docker_complete_nodes_names && ret=0 1323 ;; 1324 (role) 1325 role_opts=('manager' 'worker') 1326 _describe -t role-opts "role options" role_opts && ret=0 1327 ;; 1328 *) 1329 _message 'value' && ret=0 1330 ;; 1331 esac 1332 else 1333 opts=('id' 'label' 'membership' 'name' 'role') 1334 _describe -t filter-opts "filter options" opts -qS "=" && ret=0 1335 fi 1336 1337 return ret 1338 } 1339 1340 __docker_node_complete_ps_filters() { 1341 [[ $PREFIX = -* ]] && return 1 1342 integer ret=1 1343 1344 if compset -P '*='; then 1345 case "${${words[-1]%=*}#*=}" in 1346 (desired-state) 1347 state_opts=('accepted' 'running') 1348 _describe -t state-opts "desired state options" state_opts && ret=0 1349 ;; 1350 *) 1351 _message 'value' && ret=0 1352 ;; 1353 esac 1354 else 1355 opts=('desired-state' 'id' 'label' 'name') 1356 _describe -t filter-opts "filter options" opts -qS "=" && ret=0 1357 fi 1358 1359 return ret 1360 } 1361 1362 __docker_nodes() { 1363 [[ $PREFIX = -* ]] && return 1 1364 integer ret=1 1365 local line s 1366 declare -a lines nodes args 1367 1368 type=$1; shift 1369 filter=$1; shift 1370 [[ $filter != "none" ]] && args=("-f $filter") 1371 1372 lines=(${(f)${:-"$(_call_program commands docker $docker_options node ls $args)"$'\n'}}) 1373 # Parse header line to find columns 1374 local i=1 j=1 k header=${lines[1]} 1375 declare -A begin end 1376 while (( j < ${#header} - 1 )); do 1377 i=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 1 )) 1378 j=$(( i + ${${header[$i,-1]}[(i) ]} - 1 )) 1379 k=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 2 )) 1380 begin[${header[$i,$((j-1))]}]=$i 1381 end[${header[$i,$((j-1))]}]=$k 1382 done 1383 end[${header[$i,$((j-1))]}]=-1 1384 lines=(${lines[2,-1]}) 1385 1386 # Node ID 1387 if [[ $type = (ids|all) ]]; then 1388 for line in $lines; do 1389 s="${line[${begin[ID]},${end[ID]}]%% ##}" 1390 nodes=($nodes $s) 1391 done 1392 fi 1393 1394 # Names 1395 if [[ $type = (names|all) ]]; then 1396 for line in $lines; do 1397 s="${line[${begin[NAME]},${end[NAME]}]%% ##}" 1398 nodes=($nodes $s) 1399 done 1400 fi 1401 1402 _describe -t nodes-list "nodes" nodes "$@" && ret=0 1403 return ret 1404 } 1405 1406 __docker_complete_nodes() { 1407 [[ $PREFIX = -* ]] && return 1 1408 __docker_nodes all none "$@" 1409 } 1410 1411 __docker_complete_nodes_ids() { 1412 [[ $PREFIX = -* ]] && return 1 1413 __docker_nodes ids none "$@" 1414 } 1415 1416 __docker_complete_nodes_names() { 1417 [[ $PREFIX = -* ]] && return 1 1418 __docker_nodes names none "$@" 1419 } 1420 1421 __docker_complete_pending_nodes() { 1422 [[ $PREFIX = -* ]] && return 1 1423 __docker_nodes all "membership=pending" "$@" 1424 } 1425 1426 __docker_complete_manager_nodes() { 1427 [[ $PREFIX = -* ]] && return 1 1428 __docker_nodes all "role=manager" "$@" 1429 } 1430 1431 __docker_complete_worker_nodes() { 1432 [[ $PREFIX = -* ]] && return 1 1433 __docker_nodes all "role=worker" "$@" 1434 } 1435 1436 __docker_node_commands() { 1437 local -a _docker_node_subcommands 1438 _docker_node_subcommands=( 1439 "demote:Demote a node as manager in the swarm" 1440 "inspect:Display detailed information on one or more nodes" 1441 "ls:List nodes in the swarm" 1442 "promote:Promote a node as manager in the swarm" 1443 "rm:Remove one or more nodes from the swarm" 1444 "ps:List tasks running on one or more nodes, defaults to current node" 1445 "update:Update a node" 1446 ) 1447 _describe -t docker-node-commands "docker node command" _docker_node_subcommands 1448 } 1449 1450 __docker_node_subcommand() { 1451 local -a _command_args opts_help 1452 local expl help="--help" 1453 integer ret=1 1454 1455 opts_help=("(: -)--help[Print usage]") 1456 1457 case "$words[1]" in 1458 (rm|remove) 1459 _arguments $(__docker_arguments) \ 1460 $opts_help \ 1461 "($help -f --force)"{-f,--force}"[Force remove a node from the swarm]" \ 1462 "($help -)*:node:__docker_complete_pending_nodes" && ret=0 1463 ;; 1464 (demote) 1465 _arguments $(__docker_arguments) \ 1466 $opts_help \ 1467 "($help -)*:node:__docker_complete_manager_nodes" && ret=0 1468 ;; 1469 (inspect) 1470 _arguments $(__docker_arguments) \ 1471 $opts_help \ 1472 "($help -f --format)"{-f=,--format=}"[Format the output using the given go template]:template: " \ 1473 "($help)--pretty[Print the information in a human friendly format]" \ 1474 "($help -)*:node:__docker_complete_nodes" && ret=0 1475 ;; 1476 (ls|list) 1477 _arguments $(__docker_arguments) \ 1478 $opts_help \ 1479 "($help)*"{-f=,--filter=}"[Provide filter values]:filter:->filter-options" \ 1480 "($help -q --quiet)"{-q,--quiet}"[Only display IDs]" && ret=0 1481 case $state in 1482 (filter-options) 1483 __docker_node_complete_ls_filters && ret=0 1484 ;; 1485 esac 1486 ;; 1487 (promote) 1488 _arguments $(__docker_arguments) \ 1489 $opts_help \ 1490 "($help -)*:node:__docker_complete_worker_nodes" && ret=0 1491 ;; 1492 (ps) 1493 _arguments $(__docker_arguments) \ 1494 $opts_help \ 1495 "($help -a --all)"{-a,--all}"[Display all instances]" \ 1496 "($help)*"{-f=,--filter=}"[Provide filter values]:filter:->filter-options" \ 1497 "($help)--no-resolve[Do not map IDs to Names]" \ 1498 "($help)--no-trunc[Do not truncate output]" \ 1499 "($help -)*:node:__docker_complete_nodes" && ret=0 1500 case $state in 1501 (filter-options) 1502 __docker_node_complete_ps_filters && ret=0 1503 ;; 1504 esac 1505 ;; 1506 (update) 1507 _arguments $(__docker_arguments) \ 1508 $opts_help \ 1509 "($help)--availability=[Availability of the node]:availability:(active pause drain)" \ 1510 "($help)*--label-add=[Add or update a node label]:key=value: " \ 1511 "($help)*--label-rm=[Remove a node label if exists]:label: " \ 1512 "($help)--role=[Role of the node]:role:(manager worker)" \ 1513 "($help -)1:node:__docker_complete_nodes" && ret=0 1514 ;; 1515 (help) 1516 _arguments $(__docker_arguments) ":subcommand:__docker_node_commands" && ret=0 1517 ;; 1518 esac 1519 1520 return ret 1521 } 1522 1523 # EO node 1524 1525 # BO plugin 1526 1527 __docker_complete_plugins() { 1528 [[ $PREFIX = -* ]] && return 1 1529 integer ret=1 1530 local line s 1531 declare -a lines plugins 1532 1533 lines=(${(f)${:-"$(_call_program commands docker $docker_options plugin ls)"$'\n'}}) 1534 1535 # Parse header line to find columns 1536 local i=1 j=1 k header=${lines[1]} 1537 declare -A begin end 1538 while (( j < ${#header} - 1 )); do 1539 i=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 1 )) 1540 j=$(( i + ${${header[$i,-1]}[(i) ]} - 1 )) 1541 k=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 2 )) 1542 begin[${header[$i,$((j-1))]}]=$i 1543 end[${header[$i,$((j-1))]}]=$k 1544 done 1545 end[${header[$i,$((j-1))]}]=-1 1546 lines=(${lines[2,-1]}) 1547 1548 # Name 1549 for line in $lines; do 1550 s="${line[${begin[NAME]},${end[NAME]}]%% ##}" 1551 s="$s:${(l:7:: :::)${${line[${begin[TAG]},${end[TAG]}]}%% ##}}" 1552 plugins=($plugins $s) 1553 done 1554 1555 _describe -t plugins-list "plugins" plugins "$@" && ret=0 1556 return ret 1557 } 1558 1559 __docker_plugin_commands() { 1560 local -a _docker_plugin_subcommands 1561 _docker_plugin_subcommands=( 1562 "disable:Disable a plugin" 1563 "enable:Enable a plugin" 1564 "inspect:Return low-level information about a plugin" 1565 "install:Install a plugin" 1566 "ls:List plugins" 1567 "push:Push a plugin" 1568 "rm:Remove a plugin" 1569 "set:Change settings for a plugin" 1570 "upgrade:Upgrade an existing plugin" 1571 ) 1572 _describe -t docker-plugin-commands "docker plugin command" _docker_plugin_subcommands 1573 } 1574 1575 __docker_plugin_subcommand() { 1576 local -a _command_args opts_help 1577 local expl help="--help" 1578 integer ret=1 1579 1580 opts_help=("(: -)--help[Print usage]") 1581 1582 case "$words[1]" in 1583 (disable) 1584 _arguments $(__docker_arguments) \ 1585 $opts_help \ 1586 "($help -f --force)"{-f,--force}"[Force the disable of an active plugin]" \ 1587 "($help -)1:plugin:__docker_complete_plugins" && ret=0 1588 ;; 1589 (enable) 1590 _arguments $(__docker_arguments) \ 1591 $opts_help \ 1592 "($help)--timeout=[HTTP client timeout (in seconds)]:timeout: " \ 1593 "($help -)1:plugin:__docker_complete_plugins" && ret=0 1594 ;; 1595 (inspect) 1596 _arguments $(__docker_arguments) \ 1597 $opts_help \ 1598 "($help -f --format)"{-f=,--format=}"[Format the output using the given Go template]:template: " \ 1599 "($help -)*:plugin:__docker_complete_plugins" && ret=0 1600 ;; 1601 (install) 1602 _arguments $(__docker_arguments) \ 1603 $opts_help \ 1604 "($help)--alias=[Local name for plugin]:alias: " \ 1605 "($help)--disable[Do not enable the plugin on install]" \ 1606 "($help)--disable-content-trust[Skip image verification (default true)]" \ 1607 "($help)--grant-all-permissions[Grant all permissions necessary to run the plugin]" \ 1608 "($help -)1:plugin:__docker_complete_plugins" \ 1609 "($help -)*:key=value: " && ret=0 1610 ;; 1611 (ls|list) 1612 _arguments $(__docker_arguments) \ 1613 $opts_help \ 1614 "($help)--no-trunc[Don't truncate output]" && ret=0 1615 ;; 1616 (push) 1617 _arguments $(__docker_arguments) \ 1618 $opts_help \ 1619 "($help)--disable-content-trust[Skip image verification (default true)]" \ 1620 "($help -)1:plugin:__docker_complete_plugins" && ret=0 1621 ;; 1622 (rm|remove) 1623 _arguments $(__docker_arguments) \ 1624 $opts_help \ 1625 "($help -f --force)"{-f,--force}"[Force the removal of an active plugin]" \ 1626 "($help -)*:plugin:__docker_complete_plugins" && ret=0 1627 ;; 1628 (set) 1629 _arguments $(__docker_arguments) \ 1630 $opts_help \ 1631 "($help -)1:plugin:__docker_complete_plugins" \ 1632 "($help -)*:key=value: " && ret=0 1633 ;; 1634 (upgrade) 1635 _arguments $(__docker_arguments) \ 1636 $opts_help \ 1637 "($help)--disable-content-trust[Skip image verification (default true)]" \ 1638 "($help)--grant-all-permissions[Grant all permissions necessary to run the plugin]" \ 1639 "($help)--skip-remote-check[Do not check if specified remote plugin matches existing plugin image]" \ 1640 "($help -)1:plugin:__docker_complete_plugins" \ 1641 "($help -):remote: " && ret=0 1642 ;; 1643 (help) 1644 _arguments $(__docker_arguments) ":subcommand:__docker_plugin_commands" && ret=0 1645 ;; 1646 esac 1647 1648 return ret 1649 } 1650 1651 # EO plugin 1652 1653 # BO secret 1654 1655 __docker_secrets() { 1656 [[ $PREFIX = -* ]] && return 1 1657 integer ret=1 1658 local line s 1659 declare -a lines secrets 1660 1661 type=$1; shift 1662 1663 lines=(${(f)${:-"$(_call_program commands docker $docker_options secret ls)"$'\n'}}) 1664 1665 # Parse header line to find columns 1666 local i=1 j=1 k header=${lines[1]} 1667 declare -A begin end 1668 while (( j < ${#header} - 1 )); do 1669 i=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 1 )) 1670 j=$(( i + ${${header[$i,-1]}[(i) ]} - 1 )) 1671 k=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 2 )) 1672 begin[${header[$i,$((j-1))]}]=$i 1673 end[${header[$i,$((j-1))]}]=$k 1674 done 1675 end[${header[$i,$((j-1))]}]=-1 1676 lines=(${lines[2,-1]}) 1677 1678 # ID 1679 if [[ $type = (ids|all) ]]; then 1680 for line in $lines; do 1681 s="${line[${begin[ID]},${end[ID]}]%% ##}" 1682 secrets=($secrets $s) 1683 done 1684 fi 1685 1686 # Names 1687 if [[ $type = (names|all) ]]; then 1688 for line in $lines; do 1689 s="${line[${begin[NAME]},${end[NAME]}]%% ##}" 1690 secrets=($secrets $s) 1691 done 1692 fi 1693 1694 _describe -t secrets-list "secrets" secrets "$@" && ret=0 1695 return ret 1696 } 1697 1698 __docker_complete_secrets() { 1699 [[ $PREFIX = -* ]] && return 1 1700 __docker_secrets all "$@" 1701 } 1702 1703 __docker_secret_commands() { 1704 local -a _docker_secret_subcommands 1705 _docker_secret_subcommands=( 1706 "create:Create a secret using stdin as content" 1707 "inspect:Display detailed information on one or more secrets" 1708 "ls:List secrets" 1709 "rm:Remove one or more secrets" 1710 ) 1711 _describe -t docker-secret-commands "docker secret command" _docker_secret_subcommands 1712 } 1713 1714 __docker_secret_subcommand() { 1715 local -a _command_args opts_help 1716 local expl help="--help" 1717 integer ret=1 1718 1719 opts_help=("(: -)--help[Print usage]") 1720 1721 case "$words[1]" in 1722 (create) 1723 _arguments $(__docker_arguments) -A '-*' \ 1724 $opts_help \ 1725 "($help)*"{-l=,--label=}"[Secret labels]:label: " \ 1726 "($help -):secret: " && ret=0 1727 ;; 1728 (inspect) 1729 _arguments $(__docker_arguments) \ 1730 $opts_help \ 1731 "($help -f --format)"{-f=,--format=}"[Format the output using the given Go template]:template: " \ 1732 "($help -)*:secret:__docker_complete_secrets" && ret=0 1733 ;; 1734 (ls|list) 1735 _arguments $(__docker_arguments) \ 1736 $opts_help \ 1737 "($help -q --quiet)"{-q,--quiet}"[Only display IDs]" && ret=0 1738 ;; 1739 (rm|remove) 1740 _arguments $(__docker_arguments) \ 1741 $opts_help \ 1742 "($help -)*:secret:__docker_complete_secrets" && ret=0 1743 ;; 1744 (help) 1745 _arguments $(__docker_arguments) ":subcommand:__docker_secret_commands" && ret=0 1746 ;; 1747 esac 1748 1749 return ret 1750 } 1751 1752 # EO secret 1753 1754 # BO service 1755 1756 __docker_service_complete_ls_filters() { 1757 [[ $PREFIX = -* ]] && return 1 1758 integer ret=1 1759 1760 if compset -P '*='; then 1761 case "${${words[-1]%=*}#*=}" in 1762 (id) 1763 __docker_complete_services_ids && ret=0 1764 ;; 1765 (name) 1766 __docker_complete_services_names && ret=0 1767 ;; 1768 *) 1769 _message 'value' && ret=0 1770 ;; 1771 esac 1772 else 1773 opts=('id' 'label' 'name') 1774 _describe -t filter-opts "filter options" opts -qS "=" && ret=0 1775 fi 1776 1777 return ret 1778 } 1779 1780 __docker_service_complete_ps_filters() { 1781 [[ $PREFIX = -* ]] && return 1 1782 integer ret=1 1783 1784 if compset -P '*='; then 1785 case "${${words[-1]%=*}#*=}" in 1786 (desired-state) 1787 state_opts=('accepted' 'running') 1788 _describe -t state-opts "desired state options" state_opts && ret=0 1789 ;; 1790 *) 1791 _message 'value' && ret=0 1792 ;; 1793 esac 1794 else 1795 opts=('desired-state' 'id' 'label' 'name') 1796 _describe -t filter-opts "filter options" opts -qS "=" && ret=0 1797 fi 1798 1799 return ret 1800 } 1801 1802 __docker_services() { 1803 [[ $PREFIX = -* ]] && return 1 1804 integer ret=1 1805 local line s 1806 declare -a lines services 1807 1808 type=$1; shift 1809 1810 lines=(${(f)${:-"$(_call_program commands docker $docker_options service ls)"$'\n'}}) 1811 1812 # Parse header line to find columns 1813 local i=1 j=1 k header=${lines[1]} 1814 declare -A begin end 1815 while (( j < ${#header} - 1 )); do 1816 i=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 1 )) 1817 j=$(( i + ${${header[$i,-1]}[(i) ]} - 1 )) 1818 k=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 2 )) 1819 begin[${header[$i,$((j-1))]}]=$i 1820 end[${header[$i,$((j-1))]}]=$k 1821 done 1822 end[${header[$i,$((j-1))]}]=-1 1823 lines=(${lines[2,-1]}) 1824 1825 # Service ID 1826 if [[ $type = (ids|all) ]]; then 1827 for line in $lines; do 1828 s="${line[${begin[ID]},${end[ID]}]%% ##}" 1829 s="$s:${(l:7:: :::)${${line[${begin[IMAGE]},${end[IMAGE]}]}%% ##}}" 1830 services=($services $s) 1831 done 1832 fi 1833 1834 # Names 1835 if [[ $type = (names|all) ]]; then 1836 for line in $lines; do 1837 s="${line[${begin[NAME]},${end[NAME]}]%% ##}" 1838 s="$s:${(l:7:: :::)${${line[${begin[IMAGE]},${end[IMAGE]}]}%% ##}}" 1839 services=($services $s) 1840 done 1841 fi 1842 1843 _describe -t services-list "services" services "$@" && ret=0 1844 return ret 1845 } 1846 1847 __docker_complete_services() { 1848 [[ $PREFIX = -* ]] && return 1 1849 __docker_services all "$@" 1850 } 1851 1852 __docker_complete_services_ids() { 1853 [[ $PREFIX = -* ]] && return 1 1854 __docker_services ids "$@" 1855 } 1856 1857 __docker_complete_services_names() { 1858 [[ $PREFIX = -* ]] && return 1 1859 __docker_services names "$@" 1860 } 1861 1862 __docker_service_commands() { 1863 local -a _docker_service_subcommands 1864 _docker_service_subcommands=( 1865 "create:Create a new service" 1866 "inspect:Display detailed information on one or more services" 1867 "logs:Fetch the logs of a service" 1868 "ls:List services" 1869 "rm:Remove one or more services" 1870 "scale:Scale one or multiple replicated services" 1871 "ps:List the tasks of a service" 1872 "update:Update a service" 1873 ) 1874 _describe -t docker-service-commands "docker service command" _docker_service_subcommands 1875 } 1876 1877 __docker_service_subcommand() { 1878 local -a _command_args opts_help opts_create_update 1879 local expl help="--help" 1880 integer ret=1 1881 1882 opts_help=("(: -)--help[Print usage]") 1883 opts_create_update=( 1884 "($help)*--constraint=[Placement constraints]:constraint: " 1885 "($help)--endpoint-mode=[Placement constraints]:mode:(dnsrr vip)" 1886 "($help)*"{-e=,--env=}"[Set environment variables]:env: " 1887 "($help)--health-cmd=[Command to run to check health]:command: " 1888 "($help)--health-interval=[Time between running the check]:time: " 1889 "($help)--health-retries=[Consecutive failures needed to report unhealthy]:retries:(1 2 3 4 5)" 1890 "($help)--health-timeout=[Maximum time to allow one check to run]:time: " 1891 "($help)--hostname=[Service container hostname]:hostname: " \ 1892 "($help)*--label=[Service labels]:label: " 1893 "($help)--limit-cpu=[Limit CPUs]:value: " 1894 "($help)--limit-memory=[Limit Memory]:value: " 1895 "($help)--log-driver=[Logging driver for service]:logging driver:__docker_complete_log_drivers" 1896 "($help)*--log-opt=[Logging driver options]:log driver options:__docker_complete_log_options" 1897 "($help)*--mount=[Attach a filesystem mount to the service]:mount: " 1898 "($help)*--network=[Network attachments]:network: " 1899 "($help)--no-healthcheck[Disable any container-specified HEALTHCHECK]" 1900 "($help)*"{-p=,--publish=}"[Publish a port as a node port]:port: " 1901 "($help)--read-only[Mount the container's root filesystem as read only]" 1902 "($help)--replicas=[Number of tasks]:replicas: " 1903 "($help)--reserve-cpu=[Reserve CPUs]:value: " 1904 "($help)--reserve-memory=[Reserve Memory]:value: " 1905 "($help)--restart-condition=[Restart when condition is met]:mode:(any none on-failure)" 1906 "($help)--restart-delay=[Delay between restart attempts]:delay: " 1907 "($help)--restart-max-attempts=[Maximum number of restarts before giving up]:max-attempts: " 1908 "($help)--restart-window=[Window used to evaluate the restart policy]:window: " 1909 "($help)*--secret=[Specify secrets to expose to the service]:secret:__docker_complete_secrets" 1910 "($help)--stop-grace-period=[Time to wait before force killing a container]:grace period: " 1911 "($help -t --tty)"{-t,--tty}"[Allocate a pseudo-TTY]" 1912 "($help)--update-delay=[Delay between updates]:delay: " 1913 "($help)--update-failure-action=[Action on update failure]:mode:(pause continue)" 1914 "($help)--update-max-failure-ratio=[Failure rate to tolerate during an update]:fraction: " 1915 "($help)--update-monitor=[Duration after each task update to monitor for failure]:window: " 1916 "($help)--update-parallelism=[Maximum number of tasks updated simultaneously]:number: " 1917 "($help -u --user)"{-u=,--user=}"[Username or UID]:user:_users" 1918 "($help)--with-registry-auth[Send registry authentication details to swarm agents]" 1919 "($help -w --workdir)"{-w=,--workdir=}"[Working directory inside the container]:directory:_directories" 1920 ) 1921 1922 case "$words[1]" in 1923 (create) 1924 _arguments $(__docker_arguments) \ 1925 $opts_help \ 1926 $opts_create_update \ 1927 "($help)*--container-label=[Container labels]:label: " \ 1928 "($help)*--dns=[Set custom DNS servers]:DNS: " \ 1929 "($help)*--dns-option=[Set DNS options]:DNS option: " \ 1930 "($help)*--dns-search=[Set custom DNS search domains]:DNS search: " \ 1931 "($help)*--env-file=[Read environment variables from a file]:environment file:_files" \ 1932 "($help)--mode=[Service Mode]:mode:(global replicated)" \ 1933 "($help)--name=[Service name]:name: " \ 1934 "($help)*--publish=[Publish a port]:port: " \ 1935 "($help -): :__docker_complete_images" \ 1936 "($help -):command: _command_names -e" \ 1937 "($help -)*::arguments: _normal" && ret=0 1938 ;; 1939 (inspect) 1940 _arguments $(__docker_arguments) \ 1941 $opts_help \ 1942 "($help -f --format)"{-f=,--format=}"[Format the output using the given go template]:template: " \ 1943 "($help)--pretty[Print the information in a human friendly format]" \ 1944 "($help -)*:service:__docker_complete_services" && ret=0 1945 ;; 1946 (logs) 1947 _arguments $(__docker_arguments) \ 1948 $opts_help \ 1949 "($help)--details[Show extra details provided to logs]" \ 1950 "($help -f --follow)"{-f,--follow}"[Follow log output]" \ 1951 "($help)--no-resolve[Do not map IDs to Names]" \ 1952 "($help)--since=[Show logs since timestamp]:timestamp: " \ 1953 "($help)--tail=[Number of lines to show from the end of the logs]:lines:(1 10 20 50 all)" \ 1954 "($help -t --timestamps)"{-t,--timestamps}"[Show timestamps]" \ 1955 "($help -)1:service:__docker_complete_services" && ret=0 1956 ;; 1957 (ls|list) 1958 _arguments $(__docker_arguments) \ 1959 $opts_help \ 1960 "($help)*"{-f=,--filter=}"[Filter output based on conditions provided]:filter:->filter-options" \ 1961 "($help)--format=[Pretty-print services using a Go template]:template: " \ 1962 "($help -q --quiet)"{-q,--quiet}"[Only display IDs]" && ret=0 1963 case $state in 1964 (filter-options) 1965 __docker_service_complete_ls_filters && ret=0 1966 ;; 1967 esac 1968 ;; 1969 (rm|remove) 1970 _arguments $(__docker_arguments) \ 1971 $opts_help \ 1972 "($help -)*:service:__docker_complete_services" && ret=0 1973 ;; 1974 (scale) 1975 _arguments $(__docker_arguments) \ 1976 $opts_help \ 1977 "($help -)*:service:->values" && ret=0 1978 case $state in 1979 (values) 1980 if compset -P '*='; then 1981 _message 'replicas' && ret=0 1982 else 1983 __docker_complete_services -qS "=" 1984 fi 1985 ;; 1986 esac 1987 ;; 1988 (ps) 1989 _arguments $(__docker_arguments) \ 1990 $opts_help \ 1991 "($help)*"{-f=,--filter=}"[Provide filter values]:filter:->filter-options" \ 1992 "($help)--no-resolve[Do not map IDs to Names]" \ 1993 "($help)--no-trunc[Do not truncate output]" \ 1994 "($help -q --quiet)"{-q,--quiet}"[Only display task IDs]" \ 1995 "($help -)*:service:__docker_complete_services" && ret=0 1996 case $state in 1997 (filter-options) 1998 __docker_service_complete_ps_filters && ret=0 1999 ;; 2000 esac 2001 ;; 2002 (update) 2003 _arguments $(__docker_arguments) \ 2004 $opts_help \ 2005 $opts_create_update \ 2006 "($help)--arg=[Service command args]:arguments: _normal" \ 2007 "($help)*--container-label-add=[Add or update container labels]:label: " \ 2008 "($help)*--container-label-rm=[Remove a container label by its key]:label: " \ 2009 "($help)*--dns-add=[Add or update custom DNS servers]:DNS: " \ 2010 "($help)*--dns-rm=[Remove custom DNS servers]:DNS: " \ 2011 "($help)*--dns-option-add=[Add or update DNS options]:DNS option: " \ 2012 "($help)*--dns-option-rm=[Remove DNS options]:DNS option: " \ 2013 "($help)*--dns-search-add=[Add or update custom DNS search domains]:DNS search: " \ 2014 "($help)*--dns-search-rm=[Remove DNS search domains]:DNS search: " \ 2015 "($help)--force[Force update]" \ 2016 "($help)*--group-add=[Add additional supplementary user groups to the container]:group:_groups" \ 2017 "($help)*--group-rm=[Remove previously added supplementary user groups from the container]:group:_groups" \ 2018 "($help)--image=[Service image tag]:image:__docker_complete_repositories" \ 2019 "($help)*--publish-add=[Add or update a port]:port: " \ 2020 "($help)*--publish-rm=[Remove a port(target-port mandatory)]:port: " \ 2021 "($help)--rollback[Rollback to previous specification]" \ 2022 "($help -)1:service:__docker_complete_services" && ret=0 2023 ;; 2024 (help) 2025 _arguments $(__docker_arguments) ":subcommand:__docker_service_commands" && ret=0 2026 ;; 2027 esac 2028 2029 return ret 2030 } 2031 2032 # EO service 2033 2034 # BO stack 2035 2036 __docker_stack_complete_ps_filters() { 2037 [[ $PREFIX = -* ]] && return 1 2038 integer ret=1 2039 2040 if compset -P '*='; then 2041 case "${${words[-1]%=*}#*=}" in 2042 (desired-state) 2043 state_opts=('accepted' 'running') 2044 _describe -t state-opts "desired state options" state_opts && ret=0 2045 ;; 2046 *) 2047 _message 'value' && ret=0 2048 ;; 2049 esac 2050 else 2051 opts=('desired-state' 'id' 'name') 2052 _describe -t filter-opts "filter options" opts -qS "=" && ret=0 2053 fi 2054 2055 return ret 2056 } 2057 2058 __docker_stack_complete_services_filters() { 2059 [[ $PREFIX = -* ]] && return 1 2060 integer ret=1 2061 2062 if compset -P '*='; then 2063 case "${${words[-1]%=*}#*=}" in 2064 *) 2065 _message 'value' && ret=0 2066 ;; 2067 esac 2068 else 2069 opts=('id' 'label' 'name') 2070 _describe -t filter-opts "filter options" opts -qS "=" && ret=0 2071 fi 2072 2073 return ret 2074 } 2075 2076 __docker_stacks() { 2077 [[ $PREFIX = -* ]] && return 1 2078 integer ret=1 2079 local line s 2080 declare -a lines stacks 2081 2082 lines=(${(f)${:-"$(_call_program commands docker $docker_options stack ls)"$'\n'}}) 2083 2084 # Parse header line to find columns 2085 local i=1 j=1 k header=${lines[1]} 2086 declare -A begin end 2087 while (( j < ${#header} - 1 )); do 2088 i=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 1 )) 2089 j=$(( i + ${${header[$i,-1]}[(i) ]} - 1 )) 2090 k=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 2 )) 2091 begin[${header[$i,$((j-1))]}]=$i 2092 end[${header[$i,$((j-1))]}]=$k 2093 done 2094 end[${header[$i,$((j-1))]}]=-1 2095 lines=(${lines[2,-1]}) 2096 2097 # Service ID 2098 for line in $lines; do 2099 s="${line[${begin[ID]},${end[ID]}]%% ##}" 2100 stacks=($stacks $s) 2101 done 2102 2103 _describe -t stacks-list "stacks" stacks "$@" && ret=0 2104 return ret 2105 } 2106 2107 __docker_complete_stacks() { 2108 [[ $PREFIX = -* ]] && return 1 2109 __docker_stacks "$@" 2110 } 2111 2112 __docker_stack_commands() { 2113 local -a _docker_stack_subcommands 2114 _docker_stack_subcommands=( 2115 "deploy:Deploy a new stack or update an existing stack" 2116 "ls:List stacks" 2117 "ps:List the tasks in the stack" 2118 "rm:Remove the stack" 2119 "services:List the services in the stack" 2120 ) 2121 _describe -t docker-stack-commands "docker stack command" _docker_stack_subcommands 2122 } 2123 2124 __docker_stack_subcommand() { 2125 local -a _command_args opts_help 2126 local expl help="--help" 2127 integer ret=1 2128 2129 opts_help=("(: -)--help[Print usage]") 2130 2131 case "$words[1]" in 2132 (deploy|up) 2133 _arguments $(__docker_arguments) \ 2134 $opts_help \ 2135 "($help)--bundle-file=[Path to a Distributed Application Bundle file]:dab:_files -g \"*.dab\"" \ 2136 "($help -c --compose-file)"{-c=,--compose-file=}"[Path to a Compose file]:compose file:_files -g \"*.(yml|yaml)\"" \ 2137 "($help)--with-registry-auth[Send registry authentication details to Swarm agents]" \ 2138 "($help -):stack:__docker_complete_stacks" && ret=0 2139 ;; 2140 (ls|list) 2141 _arguments $(__docker_arguments) \ 2142 $opts_help && ret=0 2143 ;; 2144 (ps) 2145 _arguments $(__docker_arguments) \ 2146 $opts_help \ 2147 "($help -a --all)"{-a,--all}"[Display all tasks]" \ 2148 "($help)*"{-f=,--filter=}"[Filter output based on conditions provided]:filter:__docker_stack_complete_ps_filters" \ 2149 "($help)--no-resolve[Do not map IDs to Names]" \ 2150 "($help)--no-trunc[Do not truncate output]" \ 2151 "($help -):stack:__docker_complete_stacks" && ret=0 2152 ;; 2153 (rm|remove|down) 2154 _arguments $(__docker_arguments) \ 2155 $opts_help \ 2156 "($help -):stack:__docker_complete_stacks" && ret=0 2157 ;; 2158 (services) 2159 _arguments $(__docker_arguments) \ 2160 $opts_help \ 2161 "($help)*"{-f=,--filter=}"[Filter output based on conditions provided]:filter:__docker_stack_complete_services_filters" \ 2162 "($help)--format=[Pretty-print services using a Go template]:template: " \ 2163 "($help -q --quiet)"{-q,--quiet}"[Only display IDs]" \ 2164 "($help -):stack:__docker_complete_stacks" && ret=0 2165 ;; 2166 (help) 2167 _arguments $(__docker_arguments) ":subcommand:__docker_stack_commands" && ret=0 2168 ;; 2169 esac 2170 2171 return ret 2172 } 2173 2174 # EO stack 2175 2176 # BO swarm 2177 2178 __docker_swarm_commands() { 2179 local -a _docker_swarm_subcommands 2180 _docker_swarm_subcommands=( 2181 "init:Initialize a swarm" 2182 "join:Join a swarm as a node and/or manager" 2183 "join-token:Manage join tokens" 2184 "leave:Leave a swarm" 2185 "unlock:Unlock swarm" 2186 "unlock-key:Manage the unlock key" 2187 "update:Update the swarm" 2188 ) 2189 _describe -t docker-swarm-commands "docker swarm command" _docker_swarm_subcommands 2190 } 2191 2192 __docker_swarm_subcommand() { 2193 local -a _command_args opts_help 2194 local expl help="--help" 2195 integer ret=1 2196 2197 opts_help=("(: -)--help[Print usage]") 2198 2199 case "$words[1]" in 2200 (init) 2201 _arguments $(__docker_arguments) \ 2202 $opts_help \ 2203 "($help)--advertise-addr=[Advertised address]:ip\:port: " \ 2204 "($help)--autolock[Enable manager autolocking]" \ 2205 "($help)--availability=[Availability of the node]:availability:(active drain pause)" \ 2206 "($help)--cert-expiry=[Validity period for node certificates]:duration: " \ 2207 "($help)--dispatcher-heartbeat=[Dispatcher heartbeat period]:duration: " \ 2208 "($help)*--external-ca=[Specifications of one or more certificate signing endpoints]:endpoint: " \ 2209 "($help)--force-new-cluster[Force create a new cluster from current state]" \ 2210 "($help)--listen-addr=[Listen address]:ip\:port: " \ 2211 "($help)--max-snapshots[Number of additional Raft snapshots to retain]" \ 2212 "($help)--snapshot-interval[Number of log entries between Raft snapshots]" \ 2213 "($help)--task-history-limit=[Task history retention limit]:limit: " && ret=0 2214 ;; 2215 (join) 2216 _arguments $(__docker_arguments) -A '-*' \ 2217 $opts_help \ 2218 "($help)--advertise-addr=[Advertised address]:ip\:port: " \ 2219 "($help)--availability=[Availability of the node]:availability:(active drain pause)" \ 2220 "($help)--listen-addr=[Listen address]:ip\:port: " \ 2221 "($help)--token=[Token for entry into the swarm]:secret: " \ 2222 "($help -):host\:port: " && ret=0 2223 ;; 2224 (join-token) 2225 _arguments $(__docker_arguments) \ 2226 $opts_help \ 2227 "($help -q --quiet)"{-q,--quiet}"[Only display token]" \ 2228 "($help)--rotate[Rotate join token]" \ 2229 "($help -):role:(manager worker)" && ret=0 2230 ;; 2231 (leave) 2232 _arguments $(__docker_arguments) \ 2233 $opts_help \ 2234 "($help -f --force)"{-f,--force}"[Force this node to leave the swarm, ignoring warnings]" && ret=0 2235 ;; 2236 (unlock) 2237 _arguments $(__docker_arguments) \ 2238 $opts_help && ret=0 2239 ;; 2240 (unlock-key) 2241 _arguments $(__docker_arguments) \ 2242 $opts_help \ 2243 "($help -q --quiet)"{-q,--quiet}"[Only display token]" \ 2244 "($help)--rotate[Rotate unlock token]" && ret=0 2245 ;; 2246 (update) 2247 _arguments $(__docker_arguments) \ 2248 $opts_help \ 2249 "($help)--autolock[Enable manager autolocking]" \ 2250 "($help)--cert-expiry=[Validity period for node certificates]:duration: " \ 2251 "($help)--dispatcher-heartbeat=[Dispatcher heartbeat period]:duration: " \ 2252 "($help)*--external-ca=[Specifications of one or more certificate signing endpoints]:endpoint: " \ 2253 "($help)--max-snapshots[Number of additional Raft snapshots to retain]" \ 2254 "($help)--snapshot-interval[Number of log entries between Raft snapshots]" \ 2255 "($help)--task-history-limit=[Task history retention limit]:limit: " && ret=0 2256 ;; 2257 (help) 2258 _arguments $(__docker_arguments) ":subcommand:__docker_network_commands" && ret=0 2259 ;; 2260 esac 2261 2262 return ret 2263 } 2264 2265 # EO swarm 2266 2267 # BO system 2268 2269 __docker_system_commands() { 2270 local -a _docker_system_subcommands 2271 _docker_system_subcommands=( 2272 "df:Show docker filesystem usage" 2273 "events:Get real time events from the server" 2274 "info:Display system-wide information" 2275 "prune:Remove unused data" 2276 ) 2277 _describe -t docker-system-commands "docker system command" _docker_system_subcommands 2278 } 2279 2280 __docker_system_subcommand() { 2281 local -a _command_args opts_help 2282 local expl help="--help" 2283 integer ret=1 2284 2285 opts_help=("(: -)--help[Print usage]") 2286 2287 case "$words[1]" in 2288 (df) 2289 _arguments $(__docker_arguments) \ 2290 $opts_help \ 2291 "($help -v --verbose)"{-v,--verbose}"[Show detailed information on space usage]" && ret=0 2292 ;; 2293 (events) 2294 _arguments $(__docker_arguments) \ 2295 $opts_help \ 2296 "($help)*"{-f=,--filter=}"[Filter values]:filter:__docker_complete_events_filter" \ 2297 "($help)--since=[Events created since this timestamp]:timestamp: " \ 2298 "($help)--until=[Events created until this timestamp]:timestamp: " \ 2299 "($help)--format=[Format the output using the given go template]:template: " && ret=0 2300 ;; 2301 (info) 2302 _arguments $(__docker_arguments) \ 2303 $opts_help \ 2304 "($help -f --format)"{-f=,--format=}"[Format the output using the given go template]:template: " && ret=0 2305 ;; 2306 (prune) 2307 _arguments $(__docker_arguments) \ 2308 $opts_help \ 2309 "($help -a --all)"{-a,--all}"[Remove all unused data, not just dangling ones]" \ 2310 "($help)*--filter=[Filter values]:filter:__docker_complete_prune_filters" \ 2311 "($help -f --force)"{-f,--force}"[Do not prompt for confirmation]" && ret=0 2312 ;; 2313 (help) 2314 _arguments $(__docker_arguments) ":subcommand:__docker_volume_commands" && ret=0 2315 ;; 2316 esac 2317 2318 return ret 2319 } 2320 2321 # EO system 2322 2323 # BO volume 2324 2325 __docker_volume_complete_ls_filters() { 2326 [[ $PREFIX = -* ]] && return 1 2327 integer ret=1 2328 2329 if compset -P '*='; then 2330 case "${${words[-1]%=*}#*=}" in 2331 (dangling) 2332 dangling_opts=('true' 'false') 2333 _describe -t dangling-filter-opts "Dangling Filter Options" dangling_opts && ret=0 2334 ;; 2335 (driver) 2336 __docker_complete_info_plugins Volume && ret=0 2337 ;; 2338 (name) 2339 __docker_complete_volumes && ret=0 2340 ;; 2341 *) 2342 _message 'value' && ret=0 2343 ;; 2344 esac 2345 else 2346 opts=('dangling' 'driver' 'label' 'name') 2347 _describe -t filter-opts "Filter Options" opts -qS "=" && ret=0 2348 fi 2349 2350 return ret 2351 } 2352 2353 __docker_complete_volumes() { 2354 [[ $PREFIX = -* ]] && return 1 2355 integer ret=1 2356 declare -a lines volumes 2357 2358 lines=(${(f)${:-"$(_call_program commands docker $docker_options volume ls)"$'\n'}}) 2359 2360 # Parse header line to find columns 2361 local i=1 j=1 k header=${lines[1]} 2362 declare -A begin end 2363 while (( j < ${#header} - 1 )); do 2364 i=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 1 )) 2365 j=$(( i + ${${header[$i,-1]}[(i) ]} - 1 )) 2366 k=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 2 )) 2367 begin[${header[$i,$((j-1))]}]=$i 2368 end[${header[$i,$((j-1))]}]=$k 2369 done 2370 end[${header[$i,$((j-1))]}]=-1 2371 lines=(${lines[2,-1]}) 2372 2373 # Names 2374 local line s 2375 for line in $lines; do 2376 s="${line[${begin[VOLUME NAME]},${end[VOLUME NAME]}]%% ##}" 2377 s="$s:${(l:7:: :::)${${line[${begin[DRIVER]},${end[DRIVER]}]}%% ##}}" 2378 volumes=($volumes $s) 2379 done 2380 2381 _describe -t volumes-list "volumes" volumes && ret=0 2382 return ret 2383 } 2384 2385 __docker_volume_commands() { 2386 local -a _docker_volume_subcommands 2387 _docker_volume_subcommands=( 2388 "create:Create a volume" 2389 "inspect:Display detailed information on one or more volumes" 2390 "ls:List volumes" 2391 "prune:Remove all unused volumes" 2392 "rm:Remove one or more volumes" 2393 ) 2394 _describe -t docker-volume-commands "docker volume command" _docker_volume_subcommands 2395 } 2396 2397 __docker_volume_subcommand() { 2398 local -a _command_args opts_help 2399 local expl help="--help" 2400 integer ret=1 2401 2402 opts_help=("(: -)--help[Print usage]") 2403 2404 case "$words[1]" in 2405 (create) 2406 _arguments $(__docker_arguments) -A '-*' \ 2407 $opts_help \ 2408 "($help -d --driver)"{-d=,--driver=}"[Volume driver name]:Driver name:(local)" \ 2409 "($help)*--label=[Set metadata for a volume]:label=value: " \ 2410 "($help)*"{-o=,--opt=}"[Driver specific options]:Driver option: " \ 2411 "($help -)1:Volume name: " && ret=0 2412 ;; 2413 (inspect) 2414 _arguments $(__docker_arguments) \ 2415 $opts_help \ 2416 "($help -f --format)"{-f=,--format=}"[Format the output using the given go template]:template: " \ 2417 "($help -)1:volume:__docker_complete_volumes" && ret=0 2418 ;; 2419 (ls) 2420 _arguments $(__docker_arguments) \ 2421 $opts_help \ 2422 "($help)*"{-f=,--filter=}"[Provide filter values]:filter:->filter-options" \ 2423 "($help)--format=[Pretty-print volumes using a Go template]:template: " \ 2424 "($help -q --quiet)"{-q,--quiet}"[Only display volume names]" && ret=0 2425 case $state in 2426 (filter-options) 2427 __docker_volume_complete_ls_filters && ret=0 2428 ;; 2429 esac 2430 ;; 2431 (prune) 2432 _arguments $(__docker_arguments) \ 2433 $opts_help \ 2434 "($help -f --force)"{-f,--force}"[Do not prompt for confirmation]" && ret=0 2435 ;; 2436 (rm) 2437 _arguments $(__docker_arguments) \ 2438 $opts_help \ 2439 "($help -f --force)"{-f,--force}"[Force the removal of one or more volumes]" \ 2440 "($help -):volume:__docker_complete_volumes" && ret=0 2441 ;; 2442 (help) 2443 _arguments $(__docker_arguments) ":subcommand:__docker_volume_commands" && ret=0 2444 ;; 2445 esac 2446 2447 return ret 2448 } 2449 2450 # EO volume 2451 2452 __docker_caching_policy() { 2453 oldp=( "$1"(Nmh+1) ) # 1 hour 2454 (( $#oldp )) 2455 } 2456 2457 __docker_commands() { 2458 local cache_policy 2459 integer force_invalidation=0 2460 2461 zstyle -s ":completion:${curcontext}:" cache-policy cache_policy 2462 if [[ -z "$cache_policy" ]]; then 2463 zstyle ":completion:${curcontext}:" cache-policy __docker_caching_policy 2464 fi 2465 2466 if ( (( ! ${+_docker_hide_legacy_commands} )) || _cache_invalid docker_hide_legacy_commands ) \ 2467 && ! _retrieve_cache docker_hide_legacy_commands; 2468 then 2469 _docker_hide_legacy_commands="${DOCKER_HIDE_LEGACY_COMMANDS}" 2470 _store_cache docker_hide_legacy_commands _docker_hide_legacy_commands 2471 fi 2472 2473 if [[ "${_docker_hide_legacy_commands}" != "${DOCKER_HIDE_LEGACY_COMMANDS}" ]]; then 2474 force_invalidation=1 2475 _docker_hide_legacy_commands="${DOCKER_HIDE_LEGACY_COMMANDS}" 2476 _store_cache docker_hide_legacy_commands _docker_hide_legacy_commands 2477 fi 2478 2479 if ( [[ ${+_docker_subcommands} -eq 0 ]] || _cache_invalid docker_subcommands ) \ 2480 && ! _retrieve_cache docker_subcommands || [[ ${force_invalidation} -eq 1 ]]; 2481 then 2482 local -a lines 2483 lines=(${(f)"$(_call_program commands docker 2>&1)"}) 2484 _docker_subcommands=(${${${(M)${lines[$((${lines[(i)*Commands:]} + 1)),-1]}:# *}## #}/ ##/:}) 2485 _docker_subcommands=($_docker_subcommands 'daemon:Enable daemon mode' 'help:Show help for a command') 2486 (( $#_docker_subcommands > 2 )) && _store_cache docker_subcommands _docker_subcommands 2487 fi 2488 _describe -t docker-commands "docker command" _docker_subcommands 2489 } 2490 2491 __docker_subcommand() { 2492 local -a _command_args opts_help 2493 local expl help="--help" 2494 integer ret=1 2495 2496 opts_help=("(: -)--help[Print usage]") 2497 2498 case "$words[1]" in 2499 (attach|commit|cp|create|diff|exec|export|kill|logs|pause|unpause|port|rename|restart|rm|run|start|stats|stop|top|update|wait) 2500 __docker_container_subcommand && ret=0 2501 ;; 2502 (build|history|import|load|pull|push|save|tag) 2503 __docker_image_subcommand && ret=0 2504 ;; 2505 (checkpoint) 2506 local curcontext="$curcontext" state 2507 _arguments $(__docker_arguments) \ 2508 $opts_help \ 2509 "($help -): :->command" \ 2510 "($help -)*:: :->option-or-argument" && ret=0 2511 2512 case $state in 2513 (command) 2514 __docker_checkpoint_commands && ret=0 2515 ;; 2516 (option-or-argument) 2517 curcontext=${curcontext%:*:*}:docker-${words[-1]}: 2518 __docker_checkpoint_subcommand && ret=0 2519 ;; 2520 esac 2521 ;; 2522 (container) 2523 local curcontext="$curcontext" state 2524 _arguments $(__docker_arguments) \ 2525 $opts_help \ 2526 "($help -): :->command" \ 2527 "($help -)*:: :->option-or-argument" && ret=0 2528 2529 case $state in 2530 (command) 2531 __docker_container_commands && ret=0 2532 ;; 2533 (option-or-argument) 2534 curcontext=${curcontext%:*:*}:docker-${words[-1]}: 2535 __docker_container_subcommand && ret=0 2536 ;; 2537 esac 2538 ;; 2539 (daemon) 2540 _arguments $(__docker_arguments) \ 2541 $opts_help \ 2542 "($help)*--add-runtime=[Register an additional OCI compatible runtime]:runtime:__docker_complete_runtimes" \ 2543 "($help)--api-cors-header=[CORS headers in the Engine API]:CORS headers: " \ 2544 "($help)*--authorization-plugin=[Authorization plugins to load]" \ 2545 "($help -b --bridge)"{-b=,--bridge=}"[Attach containers to a network bridge]:bridge:_net_interfaces" \ 2546 "($help)--bip=[Network bridge IP]:IP address: " \ 2547 "($help)--cgroup-parent=[Parent cgroup for all containers]:cgroup: " \ 2548 "($help)--cluster-advertise=[Address or interface name to advertise]:Instance to advertise (host\:port): " \ 2549 "($help)--cluster-store=[URL of the distributed storage backend]:Cluster Store:->cluster-store" \ 2550 "($help)*--cluster-store-opt=[Cluster store options]:Cluster options:->cluster-store-options" \ 2551 "($help)--config-file=[Path to daemon configuration file]:Config File:_files" \ 2552 "($help)--containerd=[Path to containerd socket]:socket:_files -g \"*.sock\"" \ 2553 "($help -D --debug)"{-D,--debug}"[Enable debug mode]" \ 2554 "($help)--default-gateway[Container default gateway IPv4 address]:IPv4 address: " \ 2555 "($help)--default-gateway-v6[Container default gateway IPv6 address]:IPv6 address: " \ 2556 "($help)--default-shm-size=[Default shm size for containers]:size:" \ 2557 "($help)*--default-ulimit=[Default ulimits for containers]:ulimit: " \ 2558 "($help)--disable-legacy-registry[Disable contacting legacy registries]" \ 2559 "($help)*--dns=[DNS server to use]:DNS: " \ 2560 "($help)*--dns-opt=[DNS options to use]:DNS option: " \ 2561 "($help)*--dns-search=[DNS search domains to use]:DNS search: " \ 2562 "($help)*--exec-opt=[Runtime execution options]:runtime execution options: " \ 2563 "($help)--exec-root=[Root directory for execution state files]:path:_directories" \ 2564 "($help)--experimental[Enable experimental features]" \ 2565 "($help)--fixed-cidr=[IPv4 subnet for fixed IPs]:IPv4 subnet: " \ 2566 "($help)--fixed-cidr-v6=[IPv6 subnet for fixed IPs]:IPv6 subnet: " \ 2567 "($help -G --group)"{-G=,--group=}"[Group for the unix socket]:group:_groups" \ 2568 "($help -g --graph)"{-g=,--graph=}"[Root of the Docker runtime]:path:_directories" \ 2569 "($help -H --host)"{-H=,--host=}"[tcp://host:port to bind/connect to]:host: " \ 2570 "($help)--icc[Enable inter-container communication]" \ 2571 "($help)--init[Run an init inside containers to forward signals and reap processes]" \ 2572 "($help)--init-path=[Path to the docker-init binary]:docker-init binary:_files" \ 2573 "($help)*--insecure-registry=[Enable insecure registry communication]:registry: " \ 2574 "($help)--ip=[Default IP when binding container ports]" \ 2575 "($help)--ip-forward[Enable net.ipv4.ip_forward]" \ 2576 "($help)--ip-masq[Enable IP masquerading]" \ 2577 "($help)--iptables[Enable addition of iptables rules]" \ 2578 "($help)--ipv6[Enable IPv6 networking]" \ 2579 "($help -l --log-level)"{-l=,--log-level=}"[Logging level]:level:(debug info warn error fatal)" \ 2580 "($help)*--label=[Key=value labels]:label: " \ 2581 "($help)--live-restore[Enable live restore of docker when containers are still running]" \ 2582 "($help)--log-driver=[Default driver for container logs]:logging driver:__docker_complete_log_drivers" \ 2583 "($help)*--log-opt=[Default log driver options for containers]:log driver options:__docker_complete_log_options" \ 2584 "($help)--max-concurrent-downloads[Set the max concurrent downloads for each pull]" \ 2585 "($help)--max-concurrent-uploads[Set the max concurrent uploads for each push]" \ 2586 "($help)--mtu=[Network MTU]:mtu:(0 576 1420 1500 9000)" \ 2587 "($help)--oom-score-adjust=[Set the oom_score_adj for the daemon]:oom-score:(-500)" \ 2588 "($help -p --pidfile)"{-p=,--pidfile=}"[Path to use for daemon PID file]:PID file:_files" \ 2589 "($help)--raw-logs[Full timestamps without ANSI coloring]" \ 2590 "($help)*--registry-mirror=[Preferred Docker registry mirror]:registry mirror: " \ 2591 "($help)--seccomp-profile=[Path to seccomp profile]:path:_files -g \"*.json\"" \ 2592 "($help -s --storage-driver)"{-s=,--storage-driver=}"[Storage driver to use]:driver:(aufs btrfs devicemapper overlay overlay2 vfs zfs)" \ 2593 "($help)--selinux-enabled[Enable selinux support]" \ 2594 "($help)--shutdown-timeout=[Set the shutdown timeout value in seconds]:time: " \ 2595 "($help)*--storage-opt=[Storage driver options]:storage driver options: " \ 2596 "($help)--tls[Use TLS]" \ 2597 "($help)--tlscacert=[Trust certs signed only by this CA]:PEM file:_files -g \"*.(pem|crt)\"" \ 2598 "($help)--tlscert=[Path to TLS certificate file]:PEM file:_files -g \"*.(pem|crt)\"" \ 2599 "($help)--tlskey=[Path to TLS key file]:Key file:_files -g \"*.(pem|key)\"" \ 2600 "($help)--tlsverify[Use TLS and verify the remote]" \ 2601 "($help)--userns-remap=[User/Group setting for user namespaces]:user\:group:->users-groups" \ 2602 "($help)--userland-proxy[Use userland proxy for loopback traffic]" \ 2603 "($help)--userland-proxy-path=[Path to the userland proxy binary]:binary:_files" && ret=0 2604 2605 case $state in 2606 (cluster-store) 2607 if compset -P '*://'; then 2608 _message 'host:port' && ret=0 2609 else 2610 store=('consul' 'etcd' 'zk') 2611 _describe -t cluster-store "Cluster Store" store -qS "://" && ret=0 2612 fi 2613 ;; 2614 (cluster-store-options) 2615 if compset -P '*='; then 2616 _files && ret=0 2617 else 2618 opts=('discovery.heartbeat' 'discovery.ttl' 'kv.cacertfile' 'kv.certfile' 'kv.keyfile' 'kv.path') 2619 _describe -t cluster-store-opts "Cluster Store Options" opts -qS "=" && ret=0 2620 fi 2621 ;; 2622 (users-groups) 2623 if compset -P '*:'; then 2624 _groups && ret=0 2625 else 2626 _describe -t userns-default "default Docker user management" '(default)' && ret=0 2627 _users && ret=0 2628 fi 2629 ;; 2630 esac 2631 ;; 2632 (events|info) 2633 __docker_system_subcommand && ret=0 2634 ;; 2635 (image) 2636 local curcontext="$curcontext" state 2637 _arguments $(__docker_arguments) \ 2638 $opts_help \ 2639 "($help -): :->command" \ 2640 "($help -)*:: :->option-or-argument" && ret=0 2641 2642 case $state in 2643 (command) 2644 __docker_image_commands && ret=0 2645 ;; 2646 (option-or-argument) 2647 curcontext=${curcontext%:*:*}:docker-${words[-1]}: 2648 __docker_image_subcommand && ret=0 2649 ;; 2650 esac 2651 ;; 2652 (images) 2653 words[1]='ls' 2654 __docker_image_subcommand && ret=0 2655 ;; 2656 (inspect) 2657 local state 2658 _arguments $(__docker_arguments) \ 2659 $opts_help \ 2660 "($help -f --format)"{-f=,--format=}"[Format the output using the given go template]:template: " \ 2661 "($help -s --size)"{-s,--size}"[Display total file sizes if the type is container]" \ 2662 "($help)--type=[Return JSON for specified type]:type:(container image network node plugin service volume)" \ 2663 "($help -)*: :->values" && ret=0 2664 2665 case $state in 2666 (values) 2667 if [[ ${words[(r)--type=container]} == --type=container ]]; then 2668 __docker_complete_containers && ret=0 2669 elif [[ ${words[(r)--type=image]} == --type=image ]]; then 2670 __docker_complete_images && ret=0 2671 elif [[ ${words[(r)--type=network]} == --type=network ]]; then 2672 __docker_complete_networks && ret=0 2673 elif [[ ${words[(r)--type=node]} == --type=node ]]; then 2674 __docker_complete_nodes && ret=0 2675 elif [[ ${words[(r)--type=plugin]} == --type=plugin ]]; then 2676 __docker_complete_plugins && ret=0 2677 elif [[ ${words[(r)--type=service]} == --type=service ]]; then 2678 __docker_complete_services && ret=0 2679 elif [[ ${words[(r)--type=volume]} == --type=volume ]]; then 2680 __docker_complete_volumes && ret=0 2681 else 2682 __docker_complete_containers 2683 __docker_complete_images 2684 __docker_complete_networks 2685 __docker_complete_nodes 2686 __docker_complete_plugins 2687 __docker_complete_services 2688 __docker_complete_volumes && ret=0 2689 fi 2690 ;; 2691 esac 2692 ;; 2693 (login) 2694 _arguments $(__docker_arguments) -A '-*' \ 2695 $opts_help \ 2696 "($help -p --password)"{-p=,--password=}"[Password]:password: " \ 2697 "($help -u --user)"{-u=,--user=}"[Username]:username: " \ 2698 "($help -)1:server: " && ret=0 2699 ;; 2700 (logout) 2701 _arguments $(__docker_arguments) -A '-*' \ 2702 $opts_help \ 2703 "($help -)1:server: " && ret=0 2704 ;; 2705 (network) 2706 local curcontext="$curcontext" state 2707 _arguments $(__docker_arguments) \ 2708 $opts_help \ 2709 "($help -): :->command" \ 2710 "($help -)*:: :->option-or-argument" && ret=0 2711 2712 case $state in 2713 (command) 2714 __docker_network_commands && ret=0 2715 ;; 2716 (option-or-argument) 2717 curcontext=${curcontext%:*:*}:docker-${words[-1]}: 2718 __docker_network_subcommand && ret=0 2719 ;; 2720 esac 2721 ;; 2722 (node) 2723 local curcontext="$curcontext" state 2724 _arguments $(__docker_arguments) \ 2725 $opts_help \ 2726 "($help -): :->command" \ 2727 "($help -)*:: :->option-or-argument" && ret=0 2728 2729 case $state in 2730 (command) 2731 __docker_node_commands && ret=0 2732 ;; 2733 (option-or-argument) 2734 curcontext=${curcontext%:*:*}:docker-${words[-1]}: 2735 __docker_node_subcommand && ret=0 2736 ;; 2737 esac 2738 ;; 2739 (plugin) 2740 local curcontext="$curcontext" state 2741 _arguments $(__docker_arguments) \ 2742 $opts_help \ 2743 "($help -): :->command" \ 2744 "($help -)*:: :->option-or-argument" && ret=0 2745 2746 case $state in 2747 (command) 2748 __docker_plugin_commands && ret=0 2749 ;; 2750 (option-or-argument) 2751 curcontext=${curcontext%:*:*}:docker-${words[-1]}: 2752 __docker_plugin_subcommand && ret=0 2753 ;; 2754 esac 2755 ;; 2756 (ps) 2757 words[1]='ls' 2758 __docker_container_subcommand && ret=0 2759 ;; 2760 (rmi) 2761 words[1]='rm' 2762 __docker_image_subcommand && ret=0 2763 ;; 2764 (search) 2765 _arguments $(__docker_arguments) -A '-*' \ 2766 $opts_help \ 2767 "($help)*"{-f=,--filter=}"[Filter values]:filter:->filter-options" \ 2768 "($help)--limit=[Maximum returned search results]:limit:(1 5 10 25 50)" \ 2769 "($help)--no-trunc[Do not truncate output]" \ 2770 "($help -):term: " && ret=0 2771 2772 case $state in 2773 (filter-options) 2774 __docker_complete_search_filters && ret=0 2775 ;; 2776 esac 2777 ;; 2778 (secret) 2779 local curcontext="$curcontext" state 2780 _arguments $(__docker_arguments) \ 2781 $opts_help \ 2782 "($help -): :->command" \ 2783 "($help -)*:: :->option-or-argument" && ret=0 2784 2785 case $state in 2786 (command) 2787 __docker_secret_commands && ret=0 2788 ;; 2789 (option-or-argument) 2790 curcontext=${curcontext%:*:*}:docker-${words[-1]}: 2791 __docker_secret_subcommand && ret=0 2792 ;; 2793 esac 2794 ;; 2795 (service) 2796 local curcontext="$curcontext" state 2797 _arguments $(__docker_arguments) \ 2798 $opts_help \ 2799 "($help -): :->command" \ 2800 "($help -)*:: :->option-or-argument" && ret=0 2801 2802 case $state in 2803 (command) 2804 __docker_service_commands && ret=0 2805 ;; 2806 (option-or-argument) 2807 curcontext=${curcontext%:*:*}:docker-${words[-1]}: 2808 __docker_service_subcommand && ret=0 2809 ;; 2810 esac 2811 ;; 2812 (stack) 2813 local curcontext="$curcontext" state 2814 _arguments $(__docker_arguments) \ 2815 $opts_help \ 2816 "($help -): :->command" \ 2817 "($help -)*:: :->option-or-argument" && ret=0 2818 2819 case $state in 2820 (command) 2821 __docker_stack_commands && ret=0 2822 ;; 2823 (option-or-argument) 2824 curcontext=${curcontext%:*:*}:docker-${words[-1]}: 2825 __docker_stack_subcommand && ret=0 2826 ;; 2827 esac 2828 ;; 2829 (swarm) 2830 local curcontext="$curcontext" state 2831 _arguments $(__docker_arguments) \ 2832 $opts_help \ 2833 "($help -): :->command" \ 2834 "($help -)*:: :->option-or-argument" && ret=0 2835 2836 case $state in 2837 (command) 2838 __docker_swarm_commands && ret=0 2839 ;; 2840 (option-or-argument) 2841 curcontext=${curcontext%:*:*}:docker-${words[-1]}: 2842 __docker_swarm_subcommand && ret=0 2843 ;; 2844 esac 2845 ;; 2846 (system) 2847 local curcontext="$curcontext" state 2848 _arguments $(__docker_arguments) \ 2849 $opts_help \ 2850 "($help -): :->command" \ 2851 "($help -)*:: :->option-or-argument" && ret=0 2852 2853 case $state in 2854 (command) 2855 __docker_system_commands && ret=0 2856 ;; 2857 (option-or-argument) 2858 curcontext=${curcontext%:*:*}:docker-${words[-1]}: 2859 __docker_system_subcommand && ret=0 2860 ;; 2861 esac 2862 ;; 2863 (version) 2864 _arguments $(__docker_arguments) \ 2865 $opts_help \ 2866 "($help -f --format)"{-f=,--format=}"[Format the output using the given go template]:template: " && ret=0 2867 ;; 2868 (volume) 2869 local curcontext="$curcontext" state 2870 _arguments $(__docker_arguments) \ 2871 $opts_help \ 2872 "($help -): :->command" \ 2873 "($help -)*:: :->option-or-argument" && ret=0 2874 2875 case $state in 2876 (command) 2877 __docker_volume_commands && ret=0 2878 ;; 2879 (option-or-argument) 2880 curcontext=${curcontext%:*:*}:docker-${words[-1]}: 2881 __docker_volume_subcommand && ret=0 2882 ;; 2883 esac 2884 ;; 2885 (help) 2886 _arguments $(__docker_arguments) ":subcommand:__docker_commands" && ret=0 2887 ;; 2888 esac 2889 2890 return ret 2891 } 2892 2893 _docker() { 2894 # Support for subservices, which allows for `compdef _docker docker-shell=_docker_containers`. 2895 # Based on /usr/share/zsh/functions/Completion/Unix/_git without support for `ret`. 2896 if [[ $service != docker ]]; then 2897 _call_function - _$service 2898 return 2899 fi 2900 2901 local curcontext="$curcontext" state line help="-h --help" 2902 integer ret=1 2903 typeset -A opt_args 2904 2905 _arguments $(__docker_arguments) -C \ 2906 "(: -)"{-h,--help}"[Print usage]" \ 2907 "($help)--config[Location of client config files]:path:_directories" \ 2908 "($help -D --debug)"{-D,--debug}"[Enable debug mode]" \ 2909 "($help -H --host)"{-H=,--host=}"[tcp://host:port to bind/connect to]:host: " \ 2910 "($help -l --log-level)"{-l=,--log-level=}"[Logging level]:level:(debug info warn error fatal)" \ 2911 "($help)--tls[Use TLS]" \ 2912 "($help)--tlscacert=[Trust certs signed only by this CA]:PEM file:_files -g "*.(pem|crt)"" \ 2913 "($help)--tlscert=[Path to TLS certificate file]:PEM file:_files -g "*.(pem|crt)"" \ 2914 "($help)--tlskey=[Path to TLS key file]:Key file:_files -g "*.(pem|key)"" \ 2915 "($help)--tlsverify[Use TLS and verify the remote]" \ 2916 "($help)--userland-proxy[Use userland proxy for loopback traffic]" \ 2917 "($help -v --version)"{-v,--version}"[Print version information and quit]" \ 2918 "($help -): :->command" \ 2919 "($help -)*:: :->option-or-argument" && ret=0 2920 2921 local host=${opt_args[-H]}${opt_args[--host]} 2922 local config=${opt_args[--config]} 2923 local docker_options="${host:+--host $host} ${config:+--config $config}" 2924 2925 case $state in 2926 (command) 2927 __docker_commands && ret=0 2928 ;; 2929 (option-or-argument) 2930 curcontext=${curcontext%:*:*}:docker-$words[1]: 2931 __docker_subcommand && ret=0 2932 ;; 2933 esac 2934 2935 return ret 2936 } 2937 2938 _dockerd() { 2939 integer ret=1 2940 words[1]='daemon' 2941 __docker_subcommand && ret=0 2942 return ret 2943 } 2944 2945 _docker "$@" 2946 2947 # Local Variables: 2948 # mode: Shell-Script 2949 # sh-indentation: 4 2950 # indent-tabs-mode: nil 2951 # sh-basic-offset: 4 2952 # End: 2953 # vim: ft=zsh sw=4 ts=4 et