Docker 镜像推送到阿里云容器镜像服务(ACR)保姆级教程:从建仓库到 push 实战避坑
2026/7/30 17:45:57 网站建设 项目流程

Docker 镜像推送到阿里云容器镜像服务(ACR)保姆级教程:从建仓库到 push 实战避坑

本地构建好的镜像只躺在自己机器上,换台服务器、交给同事、上云部署全用不了。把镜像推到阿里云容器镜像服务(ACR)自建仓库,是一种免费、稳定、国内拉取速度快的托管方案。

本文手把手带你走完「创建仓库 → 登录 → 打 tag → 推送 → 验证」全流程,并列出最容易踩的 5 个坑。全程基于 CentOS 7 + Docker 20.10 实测,照着做即可成功。

适用读者:已在本机装好 Docker(能正常docker build/docker images)、想把一个镜像托管到云端的同学。

一、前置准备

  1. 一个阿里云账号(实名认证后即可使用容器镜像服务个人版,个人版免费
  2. 本机已安装 Docker 并能正常运行
  3. 一个本地已有的镜像(本文以my-app:1.0.0为例;没有的话随便docker pull nginx:alpine拉一个练手也行)

二、在阿里云创建镜像仓库

2.1 进入容器镜像服务

  1. 登录阿里云控制台,搜索「容器镜像服务」或直接访问:

    https://cr.console.aliyun.com
  2. 首次使用会提示「开通服务」,点开通即可(个人版免费,不需要付费)。

2.2 创建命名空间

镜像仓库必须挂在某个命名空间下(相当于一个分组,建议用项目名或公司名)。

  1. 左侧菜单「命名空间」→「创建命名空间」
  2. 填写名称(如my-company),确认创建

命名空间名称全局唯一,已被占用就换一个。

2.3 创建镜像仓库

  1. 左侧菜单「镜像仓库」→「创建镜像仓库」
  2. 填写:
    • 仓库名称:如my-app(建议和镜像名一致)
    • 命名空间:选刚才建的my-company
    • 仓库类型:选「私有」更稳妥(公开任何人都能拉,按需选择)
    • 摘要 / 描述:随便填
  3. 代码源先选「本地仓库」(即手动 push,不用绑定代码仓库)
  4. 点「创建」完成

创建成功后,页面会显示一个仓库地址,形如:

registry.cn-hangzhou.aliyuncs.com/my-company/my-app

记住它,后面打 tag 和 push 都要用。注意地域(这里是cn-hangzhou杭州),要选离你近的地域,拉取更快。

三、登录阿里云镜像仓库

在本机终端执行登录命令:

dockerlogin--username=你的阿里云账号 registry.cn-hangzhou.aliyuncs.com
  • --username填你的阿里云登录账号(通常是手机号或邮箱,不是昵称)
  • 回车后会提示输入密码:
    • 个人版:密码是你在「访问凭证」页面设置的Registry 登录密码(不是阿里云账号登录密码!)
    • 如果没设置过:控制台 → 左侧「访问凭证」→ 设置固定密码

登录成功会看到Login Succeeded

建议先去「访问凭证」把 Registry 密码设成固定的,避免每次用临时密码。

四、给本地镜像打 tag

阿里云要求镜像必须按它的地址格式打 tag,否则不认。格式:

registry.cn-hangzhou.aliyuncs.com/命名空间/仓库名:版本号

假设本地镜像是my-app:1.0.0,执行:

dockertag my-app:1.0.0 registry.cn-hangzhou.aliyuncs.com/my-company/my-app:1.0.0

打 tag 不会复制镜像内容,只是新建一个指向同一镜像层的引用,速度很快、不占额外空间。

可以用docker images | grep my-app确认新增了一条记录,REPOSITORY 已经是阿里云地址。

五、推送镜像

dockerpush registry.cn-hangzhou.aliyuncs.com/my-company/my-app:1.0.0

终端会逐层(layer)上传,出现PushingPushedlatest: digest:即成功。

首次推送会比较慢(取决于镜像大小和网络),耐心等进度条走完。

六、验证推送结果

回到阿里云控制台 → 「镜像仓库」→ 进入my-app仓库 → 「镜像版本」标签,能看到1.0.0已经在列表里了。

也可以在另一台机器上拉取验证(把镜像名换成你的):

dockerpull registry.cn-hangzhou.aliyuncs.com/my-company/my-app:1.0.0

能拉下来说明推送链路完全打通。

七、常见坑(重点避坑)

坑 1:登录密码不对

报错unauthorized: authentication required或登录直接失败。

  • 用的是阿里云账号登录密码→ 错,必须用「访问凭证」里的Registry 登录密码
  • 去「访问凭证」重新设置固定密码再试

坑 2:tag 地址写错地域 / 命名空间

docker pushdenied: requested access to the resource is denied

  • 最常见原因:tag 里的地域、命名空间或仓库名和阿里云实际不一致
  • 严格照着仓库页面的「公网地址」复制,别手敲
  • 区分cn-hangzhou/cn-beijing等地域,写错一个字母就拒

坑 3:镜像名没带 tag,默认推成 latest

docker push时如果本地 tag 没写版本(只有repo:latest),云端会建一个latest版本。

  • 建议:永远显式打版本号 tag,避免多台机器拉到不同内容

  • 可以一个镜像同时打多个 tag 再推:

    dockertag my-app:1.0.0 registry.cn-hangzhou.aliyuncs.com/my-company/my-app:1.0.0dockertag my-app:1.0.0 registry.cn-hangzhou.aliyuncs.com/my-company/my-app:latestdockerpush registry.cn-hangzhou.aliyuncs.com/my-company/my-app:1.0.0dockerpush registry.cn-hangzhou.aliyuncs.com/my-company/my-app:latest

坑 4:镜像太大,推送超时

  • 构建时用alpine基础镜像、合并RUN指令减少层数、用.dockerignore排除无关文件
  • 网络不稳可重试docker push,Docker 支持断点续传(已传的 layer 不会重传)

坑 5:私有仓库未授权就被拉取

别人拉你的私有仓库会报pull access denied

  • 要么把仓库改成「公开」
  • 要么给对方账号授权:仓库「访问控制」→ 添加授权的 RAM 用户

八、配合 CI 自动化(进阶)

手动 push 适合偶尔发布。如果频繁构建,可以把这套流程写进 CI 脚本(GitLab CI / GitHub Actions):

# CI 中示例echo"$ACR_PASSWORD"|dockerlogin--username=$ACR_USERNAME--password-stdin registry.cn-hangzhou.aliyuncs.comdockerbuild-tregistry.cn-hangzhou.aliyuncs.com/my-company/my-app:$CI_COMMIT_TAG.dockerpush registry.cn-hangzhou.aliyuncs.com/my-company/my-app:$CI_COMMIT_TAG

--password-stdin从环境变量读密码,别把密码写进脚本文件。

写在最后

把镜像推到阿里云 ACR,本质就是四步:登录 → tag → push → 验证,难点都在「密码」和「地址格式」上,按本文一步步走基本不会翻车。

觉得本文有帮助的话,别忘了点赞 👍 + 收藏 ⭐,你的支持是我持续输出的动力!

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询