使用docker-credential-secretservice时Docker登录失败求助
WSL2 Ubuntu 22.04中使用secretservice存储Docker凭证失败问题
在Windows 2022系统的WSL2 Ubuntu 22.04环境中,尝试通过secretservice管理Docker登录凭证,执行了以下操作:
wget -O docker-credential-secretservice https://github.com/docker/docker-credential-helpers/releases/download/v0.8.0/docker-credential-secretservice-v0.8.0.linux-amd64 chmod +x docker-credential-secretservice sudo mv docker-credential-secretservice /usr/local/bin/ sudo apt install -y libsecret-1-0 systemd-machine-id-setup --print mkdir -p ~/.docker cat <<EOT >> ~/.docker/config.json { "credsStore": "secretservice" } EOT
但执行登录命令时失败:
echo $GITHUB_TOKEN | docker login ghcr.io -u <myuser> --password-stdin
报错信息:
Error saving credentials: error storing credentials - err: exit status 1, out: `Could not connect: No such file or directory`
问题原因
WSL2默认未运行与secretservice兼容的密钥管理服务(如GNOME Keyring),导致docker-credential-secretservice无法连接到密钥存储后端。
解决方案
方案1:启用GNOME Keyring作为密钥存储后端
- 安装依赖组件:
sudo apt install -y gnome-keyring libpam-gnome-keyring
- 配置PAM自动启动并解锁密钥环:
编辑/etc/pam.d/login和/etc/pam.d/su,在文件末尾添加:
session optional pam_gnome_keyring.so auto_start
- 配置会话启动时启动密钥环服务:
在~/.bashrc(或~/.zshrc,根据你使用的Shell)中添加以下内容:
# 启动DBus会话(secretservice依赖) if [ -z "$DBUS_SESSION_BUS_ADDRESS" ]; then eval $(dbus-launch --sh-syntax --exit-with-session) fi # 启动gnome-keyring-daemon if ! pgrep -x "gnome-keyring-daemon" > /dev/null; then gnome-keyring-daemon --start --components=secrets fi
- 重启WSL会话(退出再重新进入),然后重新执行Docker登录命令。
方案2:改用文件存储凭证(适合自动化测试环境,注意安全)
如果不需要密钥环加密存储,可修改~/.docker/config.json,将credsStore改为file:
{ "credsStore": "file" }
此方式会将凭证明文存储在~/.docker/config.json中,仅建议在测试环境使用。
内容的提问来源于stack exchange,提问作者Michael K.




