When I tried to do docker login -u username
, I got below error.
Error saving credentials: error storing credentials - err: exit status 1, out:
`Post "https://hub.docker.com/v2/users/login?refresh_token=true": EOF`
My environment:
- macOS 13.4 (22F66)
- Docker Desktop 4.20.1 (110738)
I got the same error popped up even when I tried to sign in in the Docker Desktop app.
The Fix
After googled for a while, I found this Stack Overflow answer helpful.
As per the answer, removing the ~/.docker/config.json
file fixes the problem.
(For safety, you can rename it instead of removing it.)
Docker will create a new config.json
file once you delete it.
The content of the old one I removed.
$ cat ~/.docker/config.json-bak
{
"auths": {},
"credsStore": "desktop",
"currentContext": "desktop-linux"
}
The one created by docker, which doesn’t block docker login
.
$ cat ~/.docker/config.json
{
"auths": {
"https://index.docker.io/v1/": {}
},
"credsStore": "osxkeychain"
}
Change the credsStore
property from the value "desktop"
to "osxkeychain"
is the key of the fix.
This property is to specify an external binary to serve as the default credential store.
Setting to "osxkeychain"
means using the docker-credential-osxkeychain
helper.
There are different credentials helpers. For example, after installed the Docker Desktop in my Mac, I have below helpers installed.
$ docker-credential-[TAB]
docker-credential-desktop docker-credential-ecr-login docker-credential-osxkeychain
It’s said the docker-credential-desktop
is just a wrapper of the docker-credential-osxkeychain
on macOS. If it’s so, "credsStore": "desktop"
was supposed to work.
Maybe there is some bug in the -desktop
helper.
Note that, removing the credsStore
property in the config.json
file also fixes the problem.
Docker will fallback to the default behavior if the property is absent:
By default, Docker looks for the native binary on each of the platforms, i.e. “osxkeychain” on macOS, “wincred” on windows