問題点
AWS ECRにsudo docker push
を実行した際にno basic auth credentials
となる。
$ aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com
WARNING! Your password will be stored unencrypted in /home/User/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credential-stores
Login Succeeded
$ sudo docker push 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/repository:tag
The push refers to repository [123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/repository]
dc63303095c5: Preparing
5513cf32130a: Preparing
1c44f9d6c008: Preparing
cb42413394c4: Preparing
no basic auth credentials
環境
Windows11 + WSL2(Ubuntu 24.04.1) + Docker Engine(27.3.1)
- Docker for Windowsは未導入
- docker credential helper は未導入
- Dockerユーザーグループにユーザー追加はしていない(dockerコマンド実行にsudoが必要な状態)
Docker Engineのインストールは以下から実施
Install Docker Engine on Ubuntu #install-using-the-repository
原因
docker push
コマンドはsudo
を付けていたのに対し、
docker login
コマンドにはsudo
を付けていなかったため。
docker login
はsudo
がなくても実行できてしまうようで、sudo
の有無で認証情報の格納先が変わる。
→sudo
を付けなかった場合:~/.docker/config.json
→sudo
を付けた場合:/root/.docker/config.json
docker push
の際にはsudo
をつけていたため、/root/.docker/config.json
に認証情報がなくエラーとなっていた。
$ aws ecr get-login-password --region ap-northeast-1 | sudo docker login --username AWS --password-stdin 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credential-stores
Login Succeeded
sudo docker login
とすると、WARNINGの認証情報の格納先も/root配下に変わっている。
参考
以下記事を参考にさせていただきました。本記事も似た構成となっておりますが、原因が別でしたので記録として残させていただきます。
その他参考
紹介されている原因はいずれもあてはまらなかった。
- 別のリージョンに対して認証されている
- プッシュ先として認証したリポジトリに対するアクセス許可がない
- トークンの有効期限が切れた
- wincred 認証情報マネージャーのバグ