123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375 |
- #compdef docker
- # Docker autocompletion for oh-my-zsh
- # Requires: Docker installed
- # Author: Azaan (@aeonazaan)
- # Updates: Bob Maerten (@bobmaerten) for Docker v0.9+
- # Paul van den Berg (@bergvandenp) for Docker v1.3+
- # ----- 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 $NF":[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
- }
- __stats() {
- __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
- }
- __exec() {
- _arguments \
- '(-d,--detach=)'{-d,--detach=}'[Detached mode: run command in the background]' \
- '(-i,--interactive=)'{-i,--interactive=}'[Keep STDIN open even if not attached]' \
- '(-t,--tty=)'{-t,--tty=}'[Allocate a pseudo-TTY]'
- __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"
- "stats":"Display a live stream of one or more containers' resource usage statistics"
- "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"
- "exec":"Run a task inside a running container"
- )
- _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 ;;
- stats)
- __stats ;;
- start)
- __start ;;
- stop)
- __stop ;;
- tag)
- __tag ;;
- top)
- __top ;;
- version)
- __version ;;
- wait)
- __wait ;;
- exec)
- __exec ;;
- esac
|