Docker 凭据存储在没有 Docker 桌面的 WSL2 上

Docker credentials store on WSL2 without Docker Desktop

在不使用 Docker 桌面的情况下直接在 WSL2 上 运行 Docker 我遵循了不同的来源。我执行的步骤与此处描述的步骤非常相似:https://dev.to/felipecrs/simply-run-docker-on-wsl2-3o8。 Docker 有效,但我仍然必须配置凭据存储,以便 docker 登录有效。我尝试了两种方法:

A) 我尝试在 https://github.com/docker/docker-credential-helpers/issues/102#issuecomment-388974092 之后使用 pass 作为凭据存储 'docker login'.. Login Succeeded.授权已添加到 .docker/config.json,其中 credsStore 设置为“pass”。但是docker登录成功后,pull命令还是失败,认证错误:Error response from daemon: unauthorized: unauthorized to access repository:... 似乎令牌不再用于后续命令。

B) 尝试一种不太理想的方法,我切换到将 wincred.exe 配置为 credsStore

~/.docker/config.json

   {
        "credsStore": "wincred.exe"
    }

如底部的奖励部分所示:https://dev.to/felipecrs/simply-run-docker-on-wsl2-3o8:

wincred_version=$(curl -fsSL -o /dev/null -w "%{url_effective}" https://github.com/docker/docker-credential-helpers/releases/latest | xargs basename)
    
sudo curl -fL "https://github.com/docker/docker-credential-helpers/releases/download/${wincred_version}/docker-credential-wincred-${wincred_version}-$(dpkg
    --print-architecture).zip" | zcat | sudo tee /usr/local/bin/docker-credential-wincred.exe >/dev/null
    
sudo chmod +x /usr/local/bin/docker-credential-wincred.exe

这种方法有效,但奇怪的是每次登录或拉取都需要超过 1 分钟才能成功通过身份验证并开始操作。

我希望有一个类似于 A 的干净的 Linux-only 方法,但也非常感谢 B 的剩余问题的解释/解决方案。

由于您使用的是 pass,这意味着您需要 GPG 密钥来加密 Docker.

的凭据存储

您的 GPG 密钥有密码吗?也许它正在尝试请求它,但它不知道要使用哪个终端。加密您的凭据不需要密码,因为它使用 public-key(所以 docker login 不会导致任何错误)但是对于解密它需要私钥,所以它会失败如果它无法要求您提供密码。

尝试将 WSL2 中的 GPG_TTY 设置为您当前用于 Docker 拉取的那个:

export GPG_TTY=$(tty)