以前、Docker Composeで原因不明の認証エラーが起きて、解決できたのでそれについて書きます。
症状
ユニットテストで通信する相手のサーバーをDockerでコンテナ化して運用しています。Gitから一式を取ってきて、いつものようにdocker-compose
でイメージをビルドして、コンテナを実行するように、以下を実行しました。
$ docker-compose up -d --build
しかし、今回は予期せぬログが出力され、イメージのビルドは中断されてしまいました。ずっとエラーなく実行できていた環境なのですが、何らかの問題が発生したようです。イメージのビルドはなしで、コンテナの実行だけを行うように、以下を入力すると、問題なくコンテナが実行されました。
$ docker-compose up -d
イメージのビルドはエラー
コンテナの実行自体は問題なく行うことができました。しかし、Dockerfile
を編集して、イメージを再ビルドしたいと思っても、次のエラーが起きてビルドができないという状態が継続するようになってしまいました。
Creating network "unittestmockserver_default" with the default driver
Building nginx
Traceback (most recent call last):
File "docker-compose", line 6, in
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 1077, in up
File "compose/cli/main.py", line 1073, 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 311, in get_all_credentials
File "site-packages/docker/auth.py", line 262, in _resolve_authconfig_credstore
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-gcloud not installed or not available in PATH
[7430] Failed to execute script docker-compose
トラブルシューティング
他のマシンで実行すると問題がないので、原因はエラーが起きるマシンのどこかにあります。次の順序で試していきました。
Docker
イメージを削除Docker Desktop
を再インストール- 設定をデフォルト設定にリセット
結果、最後の「設定をデフォルト設定にリセット」で直りました。
設定をデフォルト設定にリセットする方法
以下のように操作します。
(1) メニューバーのDocker
アイコンから「Troubleshoot」を選択する。
(2) 「Troubleshoot」ウインドウから「Reset to factory defaults」ボタンをクリックする。