3
2

Docker Desktop を削除しWSL2のDockerを利用する

Last updated at Posted at 2024-09-01

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を使わなくなった後のエラー対応」 の内容と同じ解決方法で対応しました。

  1. ~/.docker/config.json の設定を変更
    1. 希望のエディタでconfigを開く。 vi ~/.docker/config.json
    2. 以下の設定を削除する
    3. "credsStore": "desktop.exe"

以降は原因を調べた方法について記載していますが、上記の手順を実行すれば問題は解決します。

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:

エラー内容の確認 (以下の手順は解決につながりません)

  1. 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

# 省略

  1. まずは以下のコマンドで、適切なdocker-composeのパスを確認しておきました
    1. 私の場合は、/usr/libexec/docker/cli-plugins/docker-compose です
    2. 原始的ですが、apt remove docker-compose-pluginapt 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
# 省略
  1. 適切なシンボリックリンクを貼り付け
    1. 私の場合、/bin/docker-compose -> /mnt/wsl/docker-desktop/cli-tools/usr/bin/docker-compose* となっていたので、以下のようにシンボリックリンクを貼りなおしました
    2. 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 オプションで上書き)
  1. 動作確認のため、docker compose up を実行する
  2. error getting credentials - err: exec: "docker-credential-desktop.exe": executable file not found in $PATH, out: のエラーが発生することを確認
    1. 結論で述べた対応を実行することで解決します

6. (参考)Docker Desktop のアンインストール手順

正しいか確認していませんが、今回の解決方法を考慮した手順を記載しておきます。
極論、WSL上でdockerのインストールが完了していれば、結論 のconfig.jsonの編集のみでWSL上のdocker-composeを参照するはずです。

  1. Docker Desktop を削除する
    1. Windowsのアプリのアンインストールでdocker を削除する
  2. WSL2 上で、dockerコマンドを叩いてみる
    1. おそらく失敗するはずです
  3. ~/.docker/config.json のファイル編集を行い、"credsStore": "desktop.exe" の設定を削除する
  4. 念のため私は/usr/local/lib/docker/cli-plugins/のシンボリックリンクを削除しています。(気持ち悪かったので。)
    1. →(追記)シンボリックリンクを消さない場合は、docker info実行時に存在しないリンクを参照してWARNINGが出るようです。
    2. 別途以下のようなメッセージも表示されますが、こちらは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をインストールしてください。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2