事象
docker-compose.yml
などを作成し、docker compose up
でDockerを立ち上げようとしたが、以下のエラーが発生した。
failed to solve: failed to resolve source metadata for docker.io/docker/dockerfile:1: failed to authorize: failed to fetch oauth token: unexpected status from GET request to https://auth.docker.io/token?scope=repository%3Adocker%2Fdockerfile%3Apull&service=registry.docker.io: 401 Unauthorized
原因
Docker Hubへの認証に失敗しており、OAuthトークンの取得ができなかったことが原因だった。
試したこと
1. Docker Desktopの再インストール
久しぶりにDockerを起動しようとしたところ、Docker Desktop自体が立ち上がらなかったため、再インストールを行った。
公式サイトから最新版をダウンロードする。
https://www.docker.com/ja-jp/products/docker-desktop/
2. Docker Desktopの起動を確認する
GUIかCLIで起動を確認する。
GUIでの確認
Docker Desktopアプリを起動する。Docker Desktop running
であればDockerが立ち上がっている。
CLIでの確認
以下のコマンドでも起動と状態を確認できる。
# 起動
open -a Docker
# 状態確認
docker info
3. docker login
を実行
ターミナルでdocker login
を実行すると以下の文言が表示される。
Authenticating with existing credentials...
Stored credentials invalid or expired
USING WEB-BASED LOGIN
To sign in with credentials on the command line, use 'docker login -u <username>'
Your one-time device confirmation code is: ◯◯◯◯-◯◯◯◯
Press ENTER to open your browser or submit your device code here: https://login.docker.com/activate
Waiting for authentication in the browser…
指示に従い、docker login -u <username>
を実行、またはエンターキーを押してWebサイトで認証を行ったが、以下のエラーが発生してログインできず。(パスワードの入力も求められなかった...)
Error response from daemon: Get "https://registry-1.docker.io/v2/": unauthorized: incorrect username or password
解決策
1. Docker Hubへのログイン確認
まずは改めてDockerへの正しい認証情報を持っているか確認する。
- ユーザー名とパスワードが正しいか
私の場合はユーザー名・パスワードともに正しい情報を把握していたので、Docker Hubにログインできた。
また、2段階認証が有効になっているとdocker login
時の認証方法が変わるっぽい?(パスワードではなく、Personal Access Tokenを使用する必要あり...?)
今回は2段階認証を無効にして試す。
2. Dockerの認証情報をクリアしてから再度ログインする
まずはログアウトと古い認証情報をクリアする。
その後、Dockerに登録しているユーザー名でログインする。
# ログアウト
docker logout
# 古い認証情報をクリア
rm ~/.docker/config.json
# ログイン
docker login -u <username>
すると、前とは異なりパスワードを聞かれるようになったので、Dockerに登録しているパスワードを入力。
docker login -u <username>
i Info → A Personal Access Token (PAT) can be used instead.
To create a PAT, visit https://app.docker.com/settings
Password:
正しい入力であれば、ログインが成功する。
Login Succeeded
ログイン成功後にdocker compose up
を実行すると成功した。
まとめ
試したことの3.でかなり時間を使ってしまいました...
多分ですが以下を試したことがエラーの解決に繋がったと思います。
- Dockerを再インストールして立ち上がることを確認したこと
-
docker logout
とrm ~/.docker/config.json
を実行したこと
Dockerは雰囲気で使ってしまっていましたが、認証周りの仕組みを理解する重要性を再認識しました...。
特にエラー発生時の対応が行き当たりばったりになっていたので反省です。