首页/云/云与容器速查/docker push 推送镜像与 login
容器与 Docker106 条

docker push 推送镜像与 login

推送本地镜像到远程仓库:先登录、再按 仓库地址/命名空间/名称:tag 打标签,然后 push;K8s 拉取私有镜像需配 imagePullSecrets。

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

docker push 是干什么的

推送镜像到远程仓库分三步:先登录仓库,再把本地镜像按仓库地址、命名空间、名称与标签重新打标,最后推送。镜像名里必须带仓库地址,否则会被当成默认公共仓库的路径而拒绝;集群拉取私有镜像还需要在配置里提供仓库凭据。

基本信息

基本流程登录仓库,重新打标到目标地址,再推送
命名格式仓库地址、命名空间、应用名与标签四部分完整写清
认证登录凭据保存在本机配置文件中,流水线里用密钥注入
集群拉取工作负载需要引用仓库凭据才能拉取私有镜像
标签策略同时推语义版本与提交短标识,便于回溯
体积影响推送按层上传,已存在的层会被跳过

典型使用场景

  • 流水线交付:构建后推送镜像,部署过程从仓库拉取
  • 跨环境分发:测试通过的镜像统一推到仓库,各环境按同一标签拉取
  • 团队共享基础镜像:把统一的基础环境镜像推上去,避免各人重复构建
  • 版本归档:为每次发布保留不可变标签,回滚时有确定的镜像可用
  • 离线环境准备:先在可联网环境推送,再由内网仓库同步
  • 多架构发布:把不同架构的镜像推到同一标签下供不同机器拉取

常见报错与原因

报错原因处理方式
无权限访问未登录或账号缺少仓库写权限重新登录并确认权限范围
仓库不存在命名空间或仓库名写错,且未开启自动创建核对地址或先在仓库侧创建
标签被拒绝目标仓库启用了不可变标签策略改用新版本号,不要覆盖历史标签
连接超时网络或仓库地址不可达确认地址与网络策略
层上传中断网络不稳定或镜像过大重试,必要时精简镜像层

完整推送流程

完整推送流程
docker login registry.example.com                              # 登录仓库
docker tag myapp:1.0.0 registry.example.com/ns/myapp:1.0.0     # 打标到目标地址
docker push registry.example.com/ns/myapp:1.0.0                # 推送
docker push registry.example.com/ns/myapp:1.0.0-abc1234        # 同时推提交标识
# 集群侧需要提供仓库凭据才能拉取私有镜像
流水线里不要把仓库密码打印到日志:使用注入的凭据文件或专用凭据机制,日志一旦被保存,密码就等于长期泄露。
同时推语义版本与提交短标识:前者便于人读与回滚,后者便于精确定位到某次提交构建出的镜像。
覆盖已有标签会让生产环境在无感知的情况下换掉镜像内容:重要环境应使用不可变标签或按摘要引用。
推送是按层上传:基础层已存在于仓库时只上传变化层,这也是统一基础镜像版本能显著缩短流水线时间的原因。

易错点

  • 镜像名没带仓库地址就直接推送,报无权限却去排查账号
  • 流水线日志里回显了仓库密码,凭据长期暴露
  • 覆盖历史版本标签,生产环境在无人察觉的情况下换了镜像内容
  • 只推 latest 不推具体版本,回滚时没有确定的镜像版本可用
  • 私有仓库凭据只在本地配置,集群侧没有配置拉取凭据,部署时才报拉取失败

数据来源与参考

  • Docker Docs:docker push
  • Docker Docs:docker login

相关工具

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