You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
356 lines
10 KiB
356 lines
10 KiB
#compdef docker |
|
|
|
# Docker autocompletion for oh-my-zsh |
|
# Requires: Docker installed |
|
# Author: Azaan (@aeonazaan) |
|
# Updates: Bob Maerten (@bobmaerten) for Docker v0.9+ |
|
|
|
|
|
# ----- Helper functions |
|
# Output a selectable list of all running docker containers |
|
__docker_containers() { |
|
declare -a cont_cmd |
|
cont_cmd=($(docker ps | awk 'NR>1{print $1":[CON("$1")"$2"("$3")]"}')) |
|
_describe 'containers' cont_cmd |
|
} |
|
|
|
# output a selectable list of all docker images |
|
__docker_images() { |
|
declare -a img_cmd |
|
img_cmd=($(docker images | awk 'NR>1{print $1}')) |
|
_describe 'images' img_cmd |
|
} |
|
|
|
# ----- Commands |
|
# Seperate function for each command, makes extension easier later |
|
# --------------------------- |
|
__attach() { |
|
_arguments \ |
|
'--no-stdin[Do not attach stdin]' \ |
|
'--sig-proxy[Proxify all received signal to the process (even in non-tty mode)]' |
|
__docker_containers |
|
} |
|
|
|
__build() { |
|
_arguments \ |
|
'--no-cache[Do not use cache when building the image]' \ |
|
'(-q,--quiet)'{-q,--quiet}'[Suppress the verbose output generated by the containers]' \ |
|
'--rm[Remove intermediate containers after a successful build]' \ |
|
'(-t,--tag=)'{-t,--tag=}'[Repository name (and optionally a tag) to be applied to the resulting image in case of success]' \ |
|
'*:files:_files' |
|
} |
|
|
|
__commit() { |
|
_arguments \ |
|
'(-a,--author=)'{-a,--author=}'[Author (eg. "John Hannibal Smith <hannibal@a-team.com>"]' \ |
|
'(-m,--message=)'{-m,--message=}'[Commit message]' \ |
|
'--run=[Config automatically applied when the image is run.]' |
|
__docker_containers |
|
} |
|
|
|
__cp() { |
|
__docker_containers |
|
} |
|
|
|
__diff() { |
|
__docker_containers |
|
} |
|
|
|
__events() { |
|
_arguments \ |
|
'--since=[Show previously created events and then stream.]' |
|
} |
|
|
|
__export() { |
|
__docker_containers |
|
} |
|
|
|
__history() { |
|
_arguments \ |
|
'--no-trunc=[Don''t truncate output]' \ |
|
'(-q,--quiet)'{-q,--quiet}'[Only show numeric IDs]' |
|
__docker_images |
|
} |
|
|
|
__images() { |
|
_arguments \ |
|
'(-a,--all)'{-a,--all}'[Show all images (by default filter out the intermediate images used to build)]' \ |
|
'--no-trunc[Don''t truncate output]' \ |
|
'(-q,--quiet=)'{-q,--quiet=}'[Only show numeric IDs]' \ |
|
'(-t,--tree=)'{-t,--tree=}'[Output graph in tree format]' \ |
|
'(-v,--viz=)'{-v,--viz=}'[Output graph in graphviz format]' |
|
__docker_images |
|
} |
|
|
|
__import() { |
|
_arguments '*:files:_files' |
|
} |
|
|
|
__info() { |
|
# no arguments |
|
} |
|
|
|
__insert() { |
|
__docker_images |
|
_arguments '*:files:_files' |
|
} |
|
|
|
__inspect() { |
|
__docker_images |
|
__docker_containers |
|
} |
|
|
|
__kill() { |
|
__docker_containers |
|
} |
|
|
|
__load() { |
|
_arguments '*:files:_files' |
|
} |
|
|
|
__login() { |
|
_arguments \ |
|
'(-e,--email=)'{-e,-email=}'[Email]' \ |
|
'(-p,--password=)'{-p,-password=}'[Password]' \ |
|
'(-u,--username=)'{-u,-username=}'[Username]' |
|
} |
|
|
|
__logs() { |
|
_arguments \ |
|
'(-f,--follow)'{-f,-follow}'[Follow log output]' |
|
__docker_containers |
|
} |
|
|
|
__port() { |
|
__docker_containers |
|
} |
|
|
|
__top() { |
|
__docker_containers |
|
} |
|
|
|
__ps() { |
|
_arguments \ |
|
'(-a,--all)'{-a,--all}'[Show all containers. Only running containers are shown by default.]' \ |
|
'--before-id=[Show only container created before Id, include non-running ones.]' \ |
|
'(-l,--latest)'{-l,--latest}'[Show only the latest created container, include non-running ones.]' \ |
|
'-n=[Show n last created containers, include non-running ones. default=-1.]' \ |
|
'--no-trunc[Don''t truncate output]' \ |
|
'(-q,--quiet)'{-q,--quiet}'[Only display numeric IDs]' \ |
|
'(-s,--size)'{-s,--size}'[Display sizes]' \ |
|
'--since-id=[Show only containers created since Id, include non-running ones.]' |
|
} |
|
|
|
__pull() { |
|
_arguments \ |
|
'(-t,--tag=)'{-t,--tag=}'[Download tagged image in repository]' |
|
} |
|
|
|
__push() { |
|
# no arguments |
|
} |
|
|
|
__restart() { |
|
_arguments \ |
|
'(-t,--time=)'{-t,--time=}'[Number of seconds to try to stop for before killing the container. Once killed it will then be restarted. Default=10]' |
|
__docker_containers |
|
} |
|
|
|
__rm() { |
|
_arguments \ |
|
'(-f,--force=)'{-f,--force=}'[Force removal of running container]' \ |
|
'(-l,--link=)'{-l,--link=}'[Remove the specified link and not the underlying container]' \ |
|
'(-v,--volumes=)'{-v,--volumes=}'[Remove the volumes associated to the container]' |
|
__docker_containers |
|
} |
|
|
|
__rmi() { |
|
_arguments \ |
|
'(-f,--force=)'{-f,--force=}'[Force]' |
|
__docker_images |
|
} |
|
|
|
__run() { |
|
_arguments \ |
|
'(-P,--publish-all=)'{-P,--publish-all=}'[Publish all exposed ports to the host interfaces]' \ |
|
'(-a,--attach=)'{-a,--attach=}'[Attach to stdin, stdout or stderr.]' \ |
|
'(-c,--cpu-shares=)'{-c,--cpu-shares=}': CPU shares (relative weight)]' \ |
|
'--cidfile=[Write the container ID to the file]' \ |
|
'(-d,--detach=)'{-d,--detach=}'[Detached mode: Run container in the background, print new container id]' \ |
|
'--dns=[Set custom dns servers]' \ |
|
'(-e,--env=)'{-e,--env=}'[Set environment variables]' \ |
|
'--entrypoint=[Overwrite the default entrypoint of the image]' \ |
|
'--expose=[Expose a port from the container without publishing it to your host]' \ |
|
'(-h,--hostname=)'{-h,--hostname=}'[Container host name]' \ |
|
'(-i,--interactive=)'{-i,--interactive=}'[Keep stdin open even if not attached]' \ |
|
'--link=[Add link to another container (name:alias)]' \ |
|
'--lxc-conf=[Add custom lxc options -lxc-conf="lxc.cgroup.cpuset.cpus = 0,1"]' \ |
|
'(-m,--memory=)'{-m,--memory=}'[Memory limit (format: <number><optional unit>, where unit = b, k, m or g)]' \ |
|
'(-n,--networking=)'{-n,--networking=}'[Enable networking for this container]' \ |
|
'--name=[Assign a name to the container]' \ |
|
'(-p,--publish=)'{-p,--publish=}'[Publish a container''s port to the host (format: ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort) (use "docker port" to see the actual mapping)]' \ |
|
'--privileged=[Give extended privileges to this container]' \ |
|
'--rm=[Automatically remove the container when it exits (incompatible with -d)]' \ |
|
'--sig-proxy=[Proxify all received signal to the process (even in non-tty mode)]' \ |
|
'(-t,--tty=)'{-t,--tty=}'[Allocate a pseudo-tty]' \ |
|
'(-u,--user=)'{-u,--user=}'[Username or UID]' \ |
|
'(-v,--volume=)'{-v,--volume=}'[Bind mount a volume (e.g. from the host: -v /host:/container, from docker: -v /container)]' \ |
|
'--volumes-from=[Mount volumes from the specified container(s)]' \ |
|
'(-w,--workdir=)'{-w,--workdir=}'[Working directory inside the container]' |
|
__docker_images |
|
} |
|
|
|
__search() { |
|
_arguments \ |
|
'--no-trunc=[Don''t truncate output]' \ |
|
'-s,--stars=)'{-s,--stars=}'[Only displays with at least xxx stars]' \ |
|
'-t,--trusted=)'{-t,--trusted=}'[Only show trusted builds]' |
|
} |
|
|
|
__save() { |
|
__docker_images |
|
} |
|
|
|
__start() { |
|
_arguments \ |
|
'(-a,--attach=)'{-a,--attach=}'[Attach container''s stdout/stderr and forward all signals to the process]' \ |
|
'(-i,--interactive=)'{-i,--interactive=}'[Attach container''s stdin]' |
|
__docker_containers |
|
} |
|
|
|
__stop() { |
|
_arguments \ |
|
'(-t,--time=)'{-t,--time=}'[Number of seconds to wait for the container to stop before killing it.]' |
|
__docker_containers |
|
} |
|
|
|
__tag() { |
|
_arguments \ |
|
'(-f,--force=)'{-f,--force=}'[Force]' |
|
__docker_images |
|
} |
|
|
|
__version() { |
|
# no arguments |
|
} |
|
|
|
__wait() { |
|
__docker_containers |
|
} |
|
|
|
# end commands --------- |
|
# ---------------------- |
|
|
|
local -a _1st_arguments |
|
_1st_arguments=( |
|
"attach":"Attach to a running container" |
|
"build":"Build a container from a Dockerfile" |
|
"commit":"Create a new image from a container's changes" |
|
"cp":"Copy files/folders from the containers filesystem to the host path" |
|
"diff":"Inspect changes on a container's filesystem" |
|
"events":"Get real time events from the server" |
|
"export":"Stream the contents of a container as a tar archive" |
|
"history":"Show the history of an image" |
|
"images":"List images" |
|
"import":"Create a new filesystem image from the contents of a tarball" |
|
"info":"Display system-wide information" |
|
"insert":"Insert a file in an image" |
|
"inspect":"Return low-level information on a container" |
|
"kill":"Kill a running container" |
|
"load":"Load an image from a tar archive" |
|
"login":"Register or Login to the docker registry server" |
|
"logs":"Fetch the logs of a container" |
|
"port":"Lookup the public-facing port which is NAT-ed to PRIVATE_PORT" |
|
"ps":"List containers" |
|
"pull":"Pull an image or a repository from the docker registry server" |
|
"push":"Push an image or a repository to the docker registry server" |
|
"restart":"Restart a running container" |
|
"rm":"Remove one or more containers" |
|
"rmi":"Remove one or more images" |
|
"run":"Run a command in a new container" |
|
"save":"Save an image to a tar archive" |
|
"search":"Search for an image in the docker index" |
|
"start":"Start a stopped container" |
|
"stop":"Stop a running container" |
|
"tag":"Tag an image into a repository" |
|
"top":"Lookup the running processes of a container" |
|
"version":"Show the docker version information" |
|
"wait":"Block until a container stops, then print its exit code" |
|
) |
|
|
|
_arguments '*:: :->command' |
|
|
|
if (( CURRENT == 1 )); then |
|
_describe -t commands "docker command" _1st_arguments |
|
return |
|
fi |
|
|
|
local -a _command_args |
|
case "$words[1]" in |
|
attach) |
|
__attach ;; |
|
build) |
|
__build ;; |
|
commit) |
|
__commit ;; |
|
cp) |
|
__cp ;; |
|
diff) |
|
__diff ;; |
|
events) |
|
__events ;; |
|
export) |
|
__export ;; |
|
history) |
|
__history ;; |
|
images) |
|
__images ;; |
|
import) |
|
__import ;; |
|
info) |
|
__info ;; |
|
insert) |
|
__insert ;; |
|
inspect) |
|
__inspect ;; |
|
kill) |
|
__kill ;; |
|
load) |
|
__load ;; |
|
login) |
|
__login ;; |
|
logs) |
|
__logs ;; |
|
port) |
|
__port ;; |
|
ps) |
|
__ps ;; |
|
pull) |
|
__pull ;; |
|
push) |
|
__push ;; |
|
restart) |
|
__restart ;; |
|
rm) |
|
__rm ;; |
|
rmi) |
|
__rmi ;; |
|
run) |
|
__run ;; |
|
save) |
|
__save ;; |
|
search) |
|
__search ;; |
|
start) |
|
__start ;; |
|
stop) |
|
__stop ;; |
|
tag) |
|
__tag ;; |
|
top) |
|
__top ;; |
|
version) |
|
__version ;; |
|
wait) |
|
__wait ;; |
|
esac
|
|
|