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