docker login 是什么
docker login 用于向镜像仓库认证:认证成功后推送与拉取私有镜像都不必重复输入凭据,凭据默认保存在 ~/.docker/config.json,也可以配置凭据助手把密码交给系统密钥链托管。交互输入密码的方式不适合自动化场景,CI 里应该用 --password-stdin 从标准输入读入密码,绝不要把密码写在命令行参数里,避免它进入 shell 历史与进程列表。
基本信息
| 语法 | docker login [仓库地址] -u 用户名 --password-stdin |
|---|---|
| 凭据位置 | 默认 ~/.docker/config.json,可配置凭据助手交由系统密钥链保管 |
| 登出 | docker logout [仓库地址] |
| 多仓库 | 按仓库地址分别保存凭据,互不影响 |
| CI 建议 | 从标准输入传入密码,用完显式登出,限制日志可见范围 |
典型使用场景
- 推送私有镜像到企业自建仓库
- 拉取需要认证的基础镜像,构建时才能取到依赖
- CI 流水线登录仓库完成构建与推送,流水线结束后登出
- 同一台机器访问多个仓库:公有云仓库与企业私有仓库并存
- 推送被拒时确认当前登录身份与目标仓库是否匹配
CI 安全写法
CI 安全写法
echo "$REGISTRY_PASSWORD" | docker login registry.example.com -u "$REGISTRY_USER" --password-stdin
docker logout registry.example.com # 用完显式登出,避免凭据残留
docker push registry.example.com/team/app:1.0.0 # 验证推送路径与登录地址一致认证方式对比
| 方式 | 写法 | 适用与风险 |
|---|---|---|
| 交互输入 | docker login <仓库> | 人工操作,密码不回显,适合本地 |
| 标准输入 | --password-stdin | CI 推荐,密码不进入历史与进程列表 |
| 命令行参数 | -p <密码> | 高危,历史记录与进程列表都能看到 |
| 凭据助手 | 配置 credsStore | 密码交由系统密钥链托管,适合长期使用 |
用命令行参数传明文密码会进入 shell 历史与进程列表,同机器上的其他用户可能直接读到;CI 中必须使用标准输入或凭据助手,并注意流水线日志的可见范围。
登录地址必须与推送地址完全一致(含端口与路径前缀):少写端口或多写路径都可能出现『认证成功但推送被拒绝』的情况,此时先核对两个地址而不是怀疑权限策略。