コンテンツにスキップ

WSL2上のdocker-composeで認証エラー

WSL2とDocker Desktop for Windowsで、WSL Integrationを使用して WSL内のUbuntuからdocker-compose upを実行すると下記のようなエラーが起きました。

docker-compose up でのエラー

> docker-compose up -d
Traceback (most recent call last):
  File "bin/docker-compose", line 6, in <module>
  File "compose/cli/main.py", line 72, in main
  File "compose/cli/main.py", line 128, in perform_command
  File "compose/cli/main.py", line 1078, in up
  File "compose/cli/main.py", line 1074, in up
  File "compose/project.py", line 548, in up
  File "compose/service.py", line 351, in ensure_image_exists
  File "compose/service.py", line 1106, in build
  File "site-packages/docker/api/build.py", line 261, in build
  File "site-packages/docker/api/build.py", line 308, in _set_auth_headers
  File "site-packages/docker/auth.py", line 301, in get_all_credentials
  File "site-packages/docker/auth.py", line 287, in _get_store_instance
  File "site-packages/docker/credentials/store.py", line 25, in __init__
docker.credentials.errors.InitializationError: docker-credential-desktop.exe not installed or not available in PATH
[2598] Failed to execute script docker-compose

エラーメッセージの通り、docker-credential-desktop.exeがPATH環境変数の中から見つからないようです。

どうやらWSL Integrationを使用している場合は、Linux側でdocker loginをしなくても、 Windows側のDocker Desktopでログインしている認証情報を使用するようです。

原因

bashのタブ補完で待たされるのが嫌なので、 wsl.confファイルでWindowsのPATH環境変数をUbuntuに引き継がないように設定していました。

WindowsのPATHで設定されているC:\Program Files\Docker\Docker\resources\binというフォルダに docker-credential-desktop.exeがあったようです。

/etc/wsl.conf

[interop]
enabled=true                # WSL内からWindowsプログラムの起動をサポートする (ver1809以降)
appendWindowsPath=false     # WSL内のPATH環境変数に、WindowsのPATH環境変数を追加する (ver1809以降)

対応

Ubuntu上の~/.profileで前述のフォルダをPATH環境変数に追加すると、エラーが解消しました。

~/.profile

echo 'export PATH="$PATH:/mnt/c/Program Files/Docker/Docker/resources/bin:/mnt/c/ProgramData/DockerDesktop/version-bin"' >> ~/.profile
tail ~/.profile