在Ubuntu的 WSL2上使用Docker Desktop进行Docker登录时,出现错误信息:error storing credentials... The stub received bad data
问题
我在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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。