1. 読者の想定
- Docker Desktop をアンインストールしたが、WSL2上で、docker-compose(Plugin)が利用できなくなった人
- エラー内容としては、以下のような結果が表示される人
- 今回トラブルシューティング個所はdocker-compose が使えない問題の解決
$ docker compose ps
docker: 'compose' is not a docker command.
See 'docker --help'
- WSL2上で思ったようにDev Container が利用できない場合など
- wslでの開発が中心だが、Docker Desktop をインストールしている場合にWindowsを参照して困る人
エラーワードは以下のようになります。
- docker: 'compose' is not a docker command.
- input/output error
- error getting credentials - err: exec: "docker-credential-desktop.exe": executable file not found in $PATH, out:
2. 結論
「WSL2上でDockerDesktopを使わなくなった後のエラー対応」 の内容と同じ解決方法で対応しました。
-
~/.docker/config.json
の設定を変更- 希望のエディタでconfigを開く。
vi ~/.docker/config.json
- 以下の設定を削除する
"credsStore": "desktop.exe"
- 希望のエディタでconfigを開く。
以降は原因を調べた方法について記載していますが、上記の手順を実行すれば問題は解決します。
3. 概要
Docker Desktop は有料となり、業務では利用していないため自宅の環境からもDocker Desktop を削除しました。
その際に発生した問題の解決手順です。
原因は以下のような形で、/mnt/wsl/docker-desktop/
へのシンボリックリンクが原因だろうと思います。desktop.exeを利用している場合ここを参照するようです。
ll /usr/local/lib/docker/cli-plugins/
total 40
drwxr-xr-x 2 root root 4096 Sep 1 11:30 ./
drwxr-xr-x 3 root root 4096 Apr 29 15:17 ../
lrwxrwxrwx 1 root root 80 Sep 1 11:30 docker-buildx -> /mnt/wsl/docker-desktop/cli-tools/usr/local/lib/docker/cli-plugins/docker-buildx*
lrwxrwxrwx 1 root root 81 Sep 1 11:30 docker-compose -> /mnt/wsl/docker-desktop/cli-tools/usr/local/lib/docker/cli-plugins/docker-compose*
lrwxrwxrwx 1 root root 77 Sep 1 11:30 docker-dev -> /mnt/wsl/docker-desktop/cli-tools/usr/local/lib/docker/cli-plugins/docker-dev*
lrwxrwxrwx 1 root root 83 Sep 1 11:30 docker-extension -> /mnt/wsl/docker-desktop/cli-tools/usr/local/lib/docker/cli-plugins/docker-extension*
lrwxrwxrwx 1 root root 78 Sep 1 11:30 docker-init -> /mnt/wsl/docker-desktop/cli-tools/usr/local/lib/docker/cli-plugins/docker-init*
lrwxrwxrwx 1 root root 78 Sep 1 11:30 docker-sbom -> /mnt/wsl/docker-desktop/cli-tools/usr/local/lib/docker/cli-plugins/docker-sbom*
lrwxrwxrwx 1 root root 78 Sep 1 11:30 docker-scan -> /mnt/wsl/docker-desktop/cli-tools/usr/local/lib/docker/cli-plugins/docker-scan*
lrwxrwxrwx 1 root root 79 Sep 1 11:30 docker-scout -> /mnt/wsl/docker-desktop/cli-tools/usr/local/lib/docker/cli-plugins/docker-scout*
4. 環境
- OS: Windows11
- WSL: WSL2
- Docker: Docker version 27.2.0
- Ubuntu: 22.04
WSL2, Windows10以上であれば対処方法に変化はないと思います。
修正箇所の内容から察するにWSLの場合(WSL2ではない)場合、対応方法が異なるかもしれません。
5. 問題の調査手順
ここは問題解決時の軌跡なので、同一症状か判断する目安にしてください。
私の場合はシンボリックリンクのリンク先を変更した後に別のエラーが発生し、本件の解決方法にたどり着きました。
解決につながったエラー:
error getting credentials - err: exec: "docker-credential-desktop.exe": executable file not found in $PATH, out:
エラー内容の確認 (以下の手順は解決につながりません)
- docker compose ps を実行した結果、docker-compose のパスが異常であることを確認できたので内容を確認
$ docker --help
Usage: docker [OPTIONS] COMMAND
A self-sufficient runtime for containers
Common Commands:
run Create and run a new container from an image
exec Execute a command in a running container
ps List containers
bui
# 省略
# 以下のようにPluginsに問題が発生していることがわかる。
Invalid Plugins:
buildx failed to fetch metadata: fork/exec /usr/local/lib/docker/cli-plugins/docker-buildx: input/output error
compose failed to fetch metadata: fork/exec /usr/local/lib/docker/cli-plugins/docker-compose: input/output error
dev failed to fetch metadata: fork/exec /usr/local/lib/docker/cli-plugins/docker-dev: input/output error
extension failed to fetch metadata: fork/exec /usr/local/lib/docker/cli-plugins/docker-extension: input/output error
init failed to fetch metadata: fork/exec /usr/local/lib/docker/cli-plugins/docker-init: input/output error
sbom failed to fetch metadata: fork/exec /usr/local/lib/docker/cli-plugins/docker-sbom: input/output error
scan failed to fetch metadata: fork/exec /usr/local/lib/docker/cli-plugins/docker-scan: input/output error
scout failed to fetch metadata: fork/exec /usr/local/lib/docker/cli-plugins/docker-scout: input/output error
# 省略
- まずは以下のコマンドで、適切なdocker-composeのパスを確認しておきました
- 私の場合は、
/usr/libexec/docker/cli-plugins/docker-compose
です - 原始的ですが、
apt remove docker-compose-plugin
とapt install docker-compose-plugin
でパッケージの確認を行いました
- 私の場合は、
$ sudo find / -name 'docker-compose' 2>/dev/null
/etc/bash_completion.d/docker-compose
/usr/libexec/docker/cli-plugins/docker-compose #これが正解ぽい
/usr/bin/docker-compose
# 省略
- 適切なシンボリックリンクを貼り付け
- 私の場合、/bin/docker-compose -> /mnt/wsl/docker-desktop/cli-tools/usr/bin/docker-compose* となっていたので、以下のようにシンボリックリンクを貼りなおしました
- docker-composeの参照先は公式を参考にしています
sudo unlink /bin/docker-compose
sudo ln -s /usr/libexec/docker/cli-plugins/docker-compose /bin/docker-compose
# sudo ln -sf /usr/libexec/docker/cli-plugins/docker-compose /bin/docker-compose を利用すれば、1行で実行できます(-f オプションで上書き)
- 動作確認のため、
docker compose up
を実行する -
error getting credentials - err: exec: "docker-credential-desktop.exe": executable file not found in $PATH, out:
のエラーが発生することを確認- →結論で述べた対応を実行することで解決します
6. (参考)Docker Desktop のアンインストール手順
正しいか確認していませんが、今回の解決方法を考慮した手順を記載しておきます。
極論、WSL上でdockerのインストールが完了していれば、結論 のconfig.jsonの編集のみでWSL上のdocker-composeを参照するはずです。
- Docker Desktop を削除する
- Windowsのアプリのアンインストールでdocker を削除する
- WSL2 上で、dockerコマンドを叩いてみる
- おそらく失敗するはずです
- ~/.docker/config.json のファイル編集を行い、
"credsStore": "desktop.exe"
の設定を削除する - 念のため私は
/usr/local/lib/docker/cli-plugins/
のシンボリックリンクを削除しています。(気持ち悪かったので。)- →(追記)シンボリックリンクを消さない場合は、
docker info
実行時に存在しないリンクを参照してWARNINGが出るようです。 - 別途以下のようなメッセージも表示されますが、こちらはDocker Desktopが提供しているblkio サブシステムの一部がサポートされていないことが原因のようです。
- →(追記)シンボリックリンクを消さない場合は、
WARNING: No blkio throttle.read_bps_device support
WARNING: No blkio throttle.write_bps_device support
WARNING: No blkio throttle.read_iops_device support
WARNING: No blkio throttle.write_iops_device support
WSL2上でdockerをすでにインストールしている場合はここで終了です。
もしWSL2に全くdockerがインストールされていなかった場合は、公式の手順に従い関連パッケージの remove 実行から始め、WSL2 にdockerをインストールしてください。