くろたんく雑記帳

日常とか、わんちゃんとか、機械学習とか、競プロとか、

MENU

【M1】Dockerコマンド補完でハマったのでメモ

はじめに

Apple Silicon (M1)のMacBook ProでDocker Desktopを導入後Dockerコマンドを補完するやり方をこれまでのMacBook Proと同じようにはできなかったので、ドキュメントに書いてある方法などでうまくいかなかった方法や、最終的にできた方法を記します。 ちなみにzsh/bin/zshのものを使っています。

Dockerコマンドの補完機能の設定について

公式にはDocker composeの設定の仕方が書いてある docs.docker.com oh-my-zshは使っていないので、 Without oh-my-zsh shellでのやり方を見ると、

mkdir -p ~/.zsh/completion
 curl \
    -L https://raw.githubusercontent.com/docker/compose/1.29.2/contrib/completion/zsh/_docker-compose \
    -o ~/.zsh/completion/_docker-compose

となっているが、このあとの処理を書き加えてもうまく行かない。(結果的にこのcurlしてくるファイルがM1には良くないっぽい)

なんか違う方法はないかと色々調べるとここらへんに行き着く docs.docker.jp

これのM1バージョンで、brewzshのpathに変更してもだめ(M1の場合のPATHは/opt/homebrew/share/zsh/site-functions/

etc=/Applications/Docker.app/Contents/Resources/etc
ln -s $etc/docker.zsh-completion /opt/homebrew/share/zsh/site-functions/_docker
ln -s $etc/docker-compose.zsh-completion /opt/homebrew/share/zsh/site-functions/_docker-compose

とまぁ、色々試した結果、なんだかよくわからんが上記合わせ技で解決。 つまり、1つ目の補完に必要なファイルをcurlで引っ張るのではなく、Docker Desktop for Macに付随している補完スクリプトシンボリックリンクを貼るようにする。

後半はzshの補完機能を有効にするために.zshrcに記述する。 シェルを一度切って、もう一度立ち上げ、docker[半角スペース]としてtabを押せば以下のようになる

% docker
attach     -- Attach local standard input, output, and error streams to a running container
build      -- Build an image from a Dockerfile
builder    -- Manage builds
buildx*    -- Docker Buildx (Docker Inc., v0.7.1)
commit     -- Create a new image from a container's changes
compose*   -- Docker Compose (Docker Inc., v2.2.1)
config     -- Manage Docker configs
container  -- Manage containers
...

docker-compose[半角スペース]としてtabを押せば以下のようになる

% docker-compose
build    -- Build or rebuild services
convert  -- Converts the compose file to platform's canonical format
cp       -- Copy files/folders between a service container and the local filesystem
create   -- Creates containers for a service.
down     -- Stop and remove containers, networks
events   -- Receive real time events from containers.
exec     -- Execute a command in a running container.
images   -- List images used by the created containers
kill     -- Force stop service containers.
logs     -- View output from containers
ls       -- List running compose projects
...

補完できている。これで快適Docker生活

おわりに

まだM1でDockerコマンドの補完について書かれているものは見つからなかったので、同じくハマっている人がいたら参考になればと思います。