docker push 是什么
把本地镜像上传到镜像仓库,供其他机器拉取部署。推送按层进行:仓库里已有的层会跳过,只上传缺失的部分,因此同一基础镜像的多次推送通常很快。上传完成后仓库会给内容摘要,它是比标签更可靠的可复现引用。
基本信息
| 语法 | docker push [选项] 名称[:标签] |
|---|---|
| 前置条件 | 已登录目标仓库,本地镜像标签含仓库地址 |
| 常用选项 | --quiet 精简输出 --all-tags 推送该仓库全部标签 |
| 权限要求 | 账号需具备目标命名空间的推送权限 |
| 返回内容 | 各层上传进度与最终的内容摘要 |
典型使用场景
- 发布新版本:构建完成后推送到仓库,供部署环境拉取
- 跨环境分发:把镜像推到内网仓库,供离线或受限网络环境使用
- 流水线交付:构建阶段负责推送,部署阶段只负责拉取,职责清晰
- 备份基础镜像:自建基础镜像推送一份到仓库,避免本地丢失后无法重建
- 多架构发布:推送多个架构的镜像并生成合并清单,供不同平台拉取
常用示例
常用示例
docker tag app/web:1.0 registry.example.com/team/app-web:1.0 # 先补全仓库地址
docker push registry.example.com/team/app-web:1.0 # 推送指定标签
docker push --quiet registry.example.com/team/app-web:1.0 # 精简输出
docker image inspect registry.example.com/team/app-web:1.0 --format '{{.RepoDigests}}' # 取摘要
docker login registry.example.com # 未登录时先登录常见失败与原因
| 现象 | 原因 | 处理办法 |
|---|---|---|
| 拒绝访问 | 未登录或账号没有该命名空间的推送权限 | 重新登录并确认权限范围 |
| 仓库不存在 | 目标仓库未创建且不允许自动创建 | 先在仓库侧创建命名空间与项目 |
| 层上传中断 | 网络不稳定或代理限制 | 重试即可,已上传的层不会重复传输 |
| 标签覆盖提示 | 远端已有同名标签 | 确认是否允许覆盖,发布用版本标签避免互相覆盖 |
| 镜像不存在本地 | 名称或标签写错 | 先列本地镜像核对完整名称 |
推送与拉取的配合
- 推送完成后记录摘要,部署引用摘要可避免标签被覆盖带来的意外
- 部署环境只保留拉取权限,减小凭据泄露后的影响范围
- 内网环境自建仓库并配置同步策略,减少对外网仓库的依赖
- 推送与拉取使用不同账号,便于审计追踪
- 失败重试前先确认本地镜像仍在,避免拉取后又推送了一遍旧版本
推送同名标签会覆盖远端原标签。正在使用该标签的部署下次拉取会拿到新内容,发布流程里用版本号标签可以避免这类互相覆盖。
本地镜像名不带仓库地址时,推送目标会被解析到公共仓库。内部镜像推送前先补全地址,避免内容进错位置。