怎么把 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/