Ubuntu EC2执行docker pull拉AWS ECR镜像报Secret.Collection接口不存在如何解决
问题现象
在Ubuntu系统EC2实例上执行docker pull从AWS ECR拉取容器镜像时触发凭证存储报错,报错信息如下:
Error saving credentials: error storing credentials - err: exit status 1, out:
No such interface 'org.freedesktop.Secret.Collection' on object at path /org/freedesktop/secrets/collection/login
对应报错截图:
故障原因
Docker默认会调用系统freedesktop Secret Service(对应gnome-keyring、pass这类凭证存储组件)保存仓库登录凭证,但无图形界面的Ubuntu Server版EC2实例默认不安装、不运行该桌面级密钥服务,导致docker凭证助手调用接口失败,无法写入ECR登录信息。
解决步骤
- 检查Docker凭证配置
执行以下命令查看当前Docker客户端配置:
如果配置中存在cat ~/.docker/config.json"credsStore": "secretservice"或"credsStore": "pass"字段,即可确认是该配置触发的报错。 - 清除无效凭证存储配置(无GUI服务器场景首选方案)
无图形界面的服务器场景不需要依赖桌面密钥环存储凭证,直接删除无效配置即可:
注意:该操作会清除本地已保存的所有Docker仓库登录凭证,操作前确认无需要留存的自定义仓库登录信息。如果需要保留其他配置,可以手动编辑config.json文件,仅删除credsStore对应的配置行即可。rm ~/.docker/config.json - 重新登录ECR仓库
配置清除后,通过AWS CLI重新执行ECR登录操作,替换命令中占位符为你实际的账号ID、ECR所在地域:
海外区域AWS去掉命令末尾的aws ecr get-login-password --region <ECR地域,例如cn-north-1> | docker login --username AWS --password-stdin <AWS账号ID>.dkr.ecr.<ECR地域>.amazonaws.com.cn.cn后缀即可。 - 验证拉取功能
登录成功后重新执行docker pull命令拉取目标镜像,即可正常执行。 - 可选方案(需保留密钥环存储场景)
如果业务要求必须使用secret服务存储凭证,可以手动安装缺失的组件:
安装完成后配置dbus会话环境、初始化pass密钥存储即可正常调用,该方案需要额外维护密钥环解锁逻辑,无图形界面生产环境不推荐使用。sudo apt update && sudo apt install -y gnome-keyring pass dbus-x11
内容的提问来源于stack exchange,提问作者Prakash Dutta
相关产品推荐
相关产品推荐

