You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用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作为密钥存储后端

  1. 安装依赖组件:
sudo apt install -y gnome-keyring libpam-gnome-keyring
  1. 配置PAM自动启动并解锁密钥环:
    编辑/etc/pam.d/login/etc/pam.d/su,在文件末尾添加:
session optional pam_gnome_keyring.so auto_start
  1. 配置会话启动时启动密钥环服务:
    ~/.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
  1. 重启WSL会话(退出再重新进入),然后重新执行Docker登录命令。

方案2:改用文件存储凭证(适合自动化测试环境,注意安全)

如果不需要密钥环加密存储,可修改~/.docker/config.json,将credsStore改为file

{
  "credsStore": "file"
}

此方式会将凭证明文存储在~/.docker/config.json中,仅建议在测试环境使用。

内容的提问来源于stack exchange,提问作者Michael K.

火山引擎 最新活动