首页/云/Docker 容器速查/凭据助手 credential helper
资源与安全50 条

凭据助手 credential helper

把登录凭据交给系统密钥库:配置 credsStore 后 docker login 的密码不再明文进 ~/.docker/config.json,团队机器与 CI 都值得统一。

Docker 容器速查云更新于 2026-10-13

凭据助手是什么

docker login 默认会把仓库口令写进 ~/.docker/config.json 的 auths 段,值只是 base64 编码,等同于明文。凭据助手(credential helper)把这个动作交给系统密钥库:配置 credsStore 之后,凭据由密钥库保管,config.json 里只留一个助手名字,机器被别人拿到文件也读不到口令。团队机器和 CI 都值得统一改造。

基本信息

机制config.json 的 credsStore 指向助手后缀名
作用范围credsStore 全局默认;credHelpers 可按 registry 单独指定并优先
助手程序独立可执行文件 docker-credential-<名字>,需在 PATH 中
交互协议Docker 经标准输入传 JSON,助手提供 store/get/erase/list 子命令
配置位置默认 ~/.docker/config.json,可用 DOCKER_CONFIG 改目录
检查看 config.json 是否还残留明文 auths 段

典型使用场景

  • 开发机统一接入钥匙串或密钥库,避免口令散落在明文配置文件里
  • CI 流水线用临时凭据目录配合短期令牌,用完即弃不落盘
  • 多仓库环境按 registry 配不同助手,把生产仓库与企业仓库分开保管
  • 审计时快速判断某台机器到底有没有启用助手,只看 config.json 就够了
  • 迁移机器时确认助手二进制随客户端一起装好,避免登录直接报错

配置与检查

配置与检查
cat ~/.docker/config.json   # 看 credsStore 与是否还有明文 auths 段
echo "$TOKEN" | docker login -u robot --password-stdin registry.example.com   # 用令牌,避免口令进历史
docker-credential-pass list   # 助手侧已保存的服务器列表
cat ~/.docker/config.json | python3 -m json.tool   # 确认 auths 已清空
docker logout registry.example.com   # 登出会调用助手的 erase 清掉条目
DOCKER_CONFIG=$(mktemp -d) docker login -u robot --password-stdin registry.example.com   # CI 隔离到临时目录

常见助手对照

助手名存储位置适用环境
desktopDocker Desktop 自带的凭据存储装了 Docker Desktop 的开发机
passpass 密码库(GPG 加密)Linux 命令行,无桌面环境也可用
secretserviceGNOME Keyring / libsecret带桌面环境的 Linux 发行版
wincredWindows 凭据管理器Windows 宿主机
osxkeychainmacOS 钥匙串macOS 宿主机
config.json 是 Docker 客户端生态的公共文件:kubectl、Helm、buildah、podman 等都会读取它。改了 credsStore 等于同时改变了这些工具的取凭据方式,切助手前先确认它们都装了对应二进制。
CI 环境更推荐用短期令牌或工作负载身份换取凭据,而不是长期静态口令:静态凭据轮换成本高,一旦写进流水线变量,权限就跟着仓库走。日志里也不要打印 config.json 的内容。
启用助手只影响之后新登录写入的凭据,之前留下的明文 auths 条目不会被自动清理,需要 docker logout 或手工删除,否则那份凭据依然可用。

易错点

  • config.json 里出现 base64 的 auths 条目说明没启用助手;base64 只是编码不是加密,文件泄露等于口令泄露。
  • credsStore 指向的二进制没装或不在 PATH 时会报 executable file not found,登录直接失败,换机器要连同助手一起部署。
  • 更换助手后旧的明文凭据文件没清干净,仍是一份可直接使用的访问凭据,清理时要逐仓库确认。
  • 用 --password 明文传参会把口令写进 shell 历史与进程列表,任何能看到 ps 输出的用户都能拿到,应改用 --password-stdin。
  • 把长期凭据随镜像或仓库分发等于把仓库推送权限一并交出去,CI 里应使用作用域受限的机器人账号或临时令牌。

数据来源与参考

  • Docker 官方文档:docker login 与 credential stores(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌