首页/云/云与容器速查/docker login 仓库认证
容器与 Docker106 条

docker login 仓库认证

登录镜像仓库以推送/拉取私有镜像:交互输入或 --password-stdin 传入密码,凭据保存在 ~/.docker/config.json。密码严禁写在命令行 -p 里。

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

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-stdinCI 推荐,密码不进入历史与进程列表
命令行参数-p <密码>高危,历史记录与进程列表都能看到
凭据助手配置 credsStore密码交由系统密钥链托管,适合长期使用
用命令行参数传明文密码会进入 shell 历史与进程列表,同机器上的其他用户可能直接读到;CI 中必须使用标准输入或凭据助手,并注意流水线日志的可见范围。
登录地址必须与推送地址完全一致(含端口与路径前缀):少写端口或多写路径都可能出现『认证成功但推送被拒绝』的情况,此时先核对两个地址而不是怀疑权限策略。

易错点

  • 用命令行参数携带密码,历史记录与进程列表同时暴露凭据
  • 登录地址与推送地址不一致(缺少端口或前缀),认证通过但推送仍被拒
  • 凭据文件被打包进镜像或提交到代码仓库,等于把仓库访问权限一并公开
  • CI 中每个步骤重复登录并在日志里留下操作痕迹,应集中登录并在结束后登出

数据来源与参考

  • Docker Docs:docker login

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌