目录

怎么把 Docker 镜像推送到阿里云容器镜像服务?

把本地 Docker 镜像推到阿里云,本质就四步:登录、打 tag、push、pull。

真正卡人的往往不是命令本身。

而是命名空间没建、仓库地址写错、或者访问凭证密码忘了设。

下面按从零开通到拉取验证的顺序走一遍,用 nginx 镜像当例子。

阿里云容器镜像服务是什么?

阿里云容器镜像服务(Container Registry,简称 ACR)是一个托管的 Docker 镜像仓库,用来存放和分发容器镜像。

它分两个版本。

个人版免费,适合个人和小项目。

企业版收费,提供安全扫描、多地域同步、P2P 加速这些能力。

个人学习用免费的个人版就够了。

控制台入口:登录阿里云后搜「容器镜像服务」,或直接打开 cr.console.aliyun.com。

推送前要先准备什么?

推送之前有三样东西必须先备好,少一样命令就会报错。

  • 设置 Registry 登录密码:开通服务后,在控制台「访问凭证」里设一个独立密码。这个密码不是阿里云账号登录密码,是专门给 docker login 用的。

  • 创建命名空间(Namespace):相当于仓库的分组,全局唯一,比如 mynamespace。

  • 创建镜像仓库(Repository):在命名空间下建具体仓库,比如 myapp,可以选公开或私有。

仓库建好后,控制台会直接给出该仓库的完整地址和操作示例,照抄最省事。

完整推送流程

地址格式统一是 registry.<地域>.aliyuncs.com/<命名空间>/<仓库名>:<标签>。

下面这套命令以杭州地域(cn-hangzhou)为例,命名空间 mynamespace、仓库 myapp 都是占位示例,换成你自己的就行。

## 1. 登录阿里云镜像仓库(密码用「访问凭证」里设置的那个)
docker login --username=your-aliyun-username registry.cn-hangzhou.aliyuncs.com

## 2. 给本地镜像打一个符合阿里云地址规范的新 tag
docker tag nginx registry.cn-hangzhou.aliyuncs.com/mynamespace/myapp:nginx-v1

## 3. 确认 tag 打对了
docker images | grep myapp

## 4. 推送到阿里云
docker push registry.cn-hangzhou.aliyuncs.com/mynamespace/myapp:nginx-v1

执行完 push,回到控制台对应仓库的「镜像版本」里就能看到 nginx-v1 这个 tag。

怎么验证推送成功?

最直接的办法:把本地镜像删掉,再从阿里云拉回来。

能拉下来,就说明推送和远端存储都没问题。

## 删除本地这个 tag 的镜像
docker rmi registry.cn-hangzhou.aliyuncs.com/mynamespace/myapp:nginx-v1

## 从阿里云重新拉取
docker pull registry.cn-hangzhou.aliyuncs.com/mynamespace/myapp:nginx-v1

## 再看一眼,镜像回来了
docker images | grep myapp

公网地址和 VPC 地址别搞混

阿里云每个仓库其实给了两个域名。

一个是公网地址(registry.cn-hangzhou.aliyuncs.com),本地电脑、外网机器走这个。

另一个是专有网络(VPC)地址(registry-vpc.cn-hangzhou.aliyuncs.com),同地域的 ECS 内网走这个,不走公网流量,速度快还省钱。

在同地域服务器上部署时,优先用 VPC 地址。

几个常见报错

报错信息 大概率原因 解决办法
unauthorized: authentication required 没登录或密码错 重新 docker login,密码用访问凭证里的
denied: requested access to the resource is denied 命名空间/仓库名写错或无权限 核对地址,确认仓库归属当前账号
name unknown 或 push 卡住 没建仓库就直接推 先在控制台创建对应 Repository
私有仓库 pull 报未授权 拉取端没登录 拉取机器也要先 docker login

私有仓库这点最坑。

排查半天才发现,是拉取的那台机器压根没登录。

常见问题

Q1. docker login 的密码是阿里云账号密码吗?

不是。

是在容器镜像服务控制台「访问凭证」里单独设置的 Registry 密码,和阿里云账号登录密码两回事。

第一次用必须先去设一个,否则 login 怎么都过不了。

Q2. 不打 tag 能直接 push 吗?

不能。

docker push 是按镜像名里的仓库地址来决定推到哪的,本地的 nginx 这种名字没有阿里云地址前缀,push 会找不到目标。

必须先用 docker tag 打成 registry.xxx.aliyuncs.com/命名空间/仓库:标签 的格式。

Q3. 个人版免费有什么限制?

个人版免费够日常用,但有默认配额限制,比如命名空间数量、仓库数量有上限,且不含安全扫描、镜像加速这些企业功能。

具体配额以控制台实时显示为准,重度使用再考虑升级企业版。

Q4. 公网地址和 VPC 地址该用哪个?

本地或外网机器用公网地址,同地域阿里云 ECS 用 VPC 地址(带 -vpc)。

VPC 走内网,不计公网流量,传大镜像时速度差别很明显。

Q5. 推送很慢怎么办?

先确认是不是用错了地址:同地域服务器误用公网地址会慢。

镜像本身太大也是常见原因,可以从精简基础镜像、多阶段构建入手减体积。

小结

阿里云推镜像没什么玄学,记牢「登录 → tag → push → pull」四步,地址格式别写错就行。

真正容易翻车的是访问凭证密码和命名空间,这两个提前在控制台备好,后面基本一路畅通。

同地域部署记得换 VPC 地址,能省下一笔公网流量。

如果你在推送过程中遇到了上面没列到的报错,或者对私有仓库授权、CI 自动推送还有疑问,欢迎在评论区交流~~~

版权声明

未经授权,禁止转载本文章。
如需转载请保留原文链接并注明出处。即视为默认获得授权。
未保留原文链接未注明出处或删除链接将视为侵权,必追究法律责任!

本文原文链接: https://fiveyoboy.com/articles/push-docker-image-to-aliyun-acr/

备用原文链接: https://blog.fiveyoboy.com/articles/push-docker-image-to-aliyun-acr/