Michael_Scharf
Michael_Scharf

Reputation: 34508

How to add bash command completion for Docker on Mac OS X?

I am running docker and I want bash command completion for docker commands and parameters.

Upvotes: 57

Views: 27196

Answers (8)

Anuj
Anuj

Reputation: 7067

Guide to setup autocomplete for ZSH on Mac OSX

Follow these steps if you are using oh-my-zsh and autocomplete is not working:

Step 1:

Make the following three links:

on Apple Silicon Mac the target symlinks should go in /opt/homebrew, i.e. replace /usr/local in above paths with /opt/homebrew

ln -s /Applications/Docker.app/Contents/Resources/etc/docker.zsh-completion /usr/local/share/zsh/site-functions/_docker

ln -s /Applications/Docker.app/Contents/Resources/etc/docker-compose.zsh-completion /usr/local/share/zsh/site-functions/_docker-compose

Step 2:

Either add autoload -Uz compinit; compinit to .zshrc

or run echo "autoload -Uz compinit; compinit" >> .zshrc in your shell

Step 3:

Apply the change to your terminal:

source .zshrc

Upvotes: 5

arulraj.net
arulraj.net

Reputation: 4807

The auto completion of docker needed not only for mac, its also needed for ubuntu / bash terminals.

In Ubuntu

curl -ksSL https://raw.githubusercontent.com/docker/cli/master/contrib/completion/bash/docker |sudo tee /etc/bash_completion.d/docker

Completion will be available upon next login.

Since its top result in google I added answer here.

Upvotes: 7

Olexander Yushko
Olexander Yushko

Reputation: 2864

The official Docker site has a section for Command-line completion, and for Mac to:

https://docs.docker.com/compose/completion/#mac

Helped for me with Homebrew:

brew install bash-completion

After the installation, Brew displays the installation path. From documentation is correct for me:

/usr/local/etc/bash_completion.d/

Run the script:

sudo curl -L https://raw.githubusercontent.com/docker/compose/1.25.4/contrib/completion/bash/docker-compose -o /usr/local/etc/bash_completion.d/docker-compose

Open and add following in the end of your file ~/.bash_profile:

if [ -f $(brew --prefix)/etc/bash_completion ]; then
 . $(brew --prefix)/etc/bash_completion
 fi

Restart terminal. It's all.

Upvotes: 2

Roy Clarkson
Roy Clarkson

Reputation: 2179

The official Docker for Mac page has a section on installing bash completion:

https://docs.docker.com/docker-for-mac/#bash

If you have Homebrew bash completion installed:

cd /usr/local/etc/bash_completion.d
ln -s /Applications/Docker.app/Contents/Resources/etc/docker.bash-completion
ln -s /Applications/Docker.app/Contents/Resources/etc/docker-machine.bash-completion
ln -s /Applications/Docker.app/Contents/Resources/etc/docker-compose.bash-completion

Upvotes: 40

Michael_Scharf
Michael_Scharf

Reputation: 34508

If you have already homebrew bash-completion installed just install the docker completion script into the bash_completion.d

curl -XGET https://raw.githubusercontent.com/docker/cli/master/contrib/completion/bash/docker > $(brew --prefix)/etc/bash_completion.d/docker

Note: If you do not have homebrew bash-completion installed, follow these instructions to install it before you execute the line above.

Note: the completion depends on some functions defined in debian bash-completion. Therefore, just sourcing the docker completion script as described in completion/bash/docker may not work. If you try to complete docker run (by hitting TAB) you may get an error like __ltrim_colon_completions: command not found. This could mean that you have not installed the bash-completion scripts.

Upvotes: 77

Harvey
Harvey

Reputation: 5821

The completion scripts come with Docker Beta. I want them to stay up to date. So, on OS X...

  • Install homebrew's bash-completion
  • Symlink the files

    find /Applications/Docker.app \
    -type f -name "*.bash-completion" \
    -exec ln -s "{}" "$(brew --prefix)/etc/bash_completion.d/" \;
    

Upvotes: 16

Hypno
Hypno

Reputation: 161

The stumbling point for me was that once you brew install bash-competion, you have to add few lines in your .bash_profile to load it once you launch Terminal:

if [ -f $(brew --prefix)/etc/bash_completion ]; then
. $(brew --prefix)/etc/bash_completion
fi

Source: http://davidalger.com/development/bash-completion-on-os-x-with-brew/

Because I haven't found anywhere a step by step documentation, I've made a quick script to install homebrew, bash-completion and eventually the completion scripts for docker. https://github.com/HypnoTheNomad/docker-bash-completion-macos-brew

Upvotes: 14

childno͡.de
childno͡.de

Reputation: 4826

Just to be said: if you use brew: brew install docker will do all what you need. It includes brew link docker which installs the completion into `brew --prefix`/etc/bash_completion.d/docker same topic, same answer for docker-machine, docker-compose, etc. ...

else (perhaps you are using Docker Beta (new "more native" docker installation package without Virtualbox) you still have to add it manually, then follow Michael's answer plus have a look at the additional completion scripts for docker-machine, docker-compose and some shell-helper that are handled in the 'script' from CodeCorrupt

Upvotes: 1

Related Questions