在Ubuntu的 WSL2上使用Docker Desktop进行Docker登录时,出现错误信息:error storing credentials... The stub received bad data

后端开发 2026-07-10

问题

我在Windows上使用带有WSL2集成的Docker Desktop。 当我运行 bash docker login <registry> -u <user> -p <password> 时,出现以下错误:```bash error storing credentials: error storing credentials - err: exit status 1, out: error storing credentials - err: exit status 1, out: The stub received bad data.

同时,我发现 Docker Desktop 不断覆盖我的 `~/.docker/config.json`,并将其设置为:
```json
"credsStore": "desktop.exe"

我已尝试过的办法

  • 从config.json中移除 credsStore
  • 重新运行 docker login
  • 重新启动Docker Desktop
  • 删除 ~/.docker/config.json

该文件会被Docker Desktop重新创建或覆盖。

解决方案

这是由于WSL互操作性被禁用导致的。

根本原因

在Windows上的Docker Desktop使用凭据助手(desktop.exe)通过Windows凭据管理器存储凭据。当使用WSL时,这需要WSL互操作性,使Linux能执行Windows的 .exe 二进制文件。

就我而言,出于某种原因,WSL互操作性被禁用,这意味着:

  • Docker Desktop不断将 "credsStore": "desktop.exe" 写入到 ~/.docker/config.json
  • 但WSL无法执行 desktop.exe
  • 这导致 docker login 因错误:The stub received bad data 而失败

因此,这个配置对于普通设置是正确的,但在我的环境中不可用。

要确认互操作性是否启用,请尝试从WSL运行一个Windows二进制文件,例如 notepad.exe。如果互操作性已启用,记事本(Notepad)应该会打开。

解决方案

重新启用WSL互操作性。

在WSL发行版中编辑(或创建)/etc/wsl.conf

[interop]
enabled=true
appendWindowsPath=true

然后从PowerShell重新启动WSL:

wsl --shutdown

重新打开WSL并再试一次

结果

启用互操作性后,docker login 将正常工作,Docker Desktop不再导致凭据错误。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章