Docker 的镜像存储中心通常被称为 Registry。
当您需要获取 Docker 镜像时,首先需要登录 Registry,然后拉取镜像。在您修改过镜像之后,您可以再次将镜像推送到 Registry 中去。
基本概念
Docker的镜像地址是什么?我们来看一个完整的例子。以容器服务的公共镜像为例,registry.cn-hangzhou.aliyuncs.com/acs/agent:0.8。
- registry.cn-hangzhou.aliyuncs.com:Registry 域名。
- acs:命名空间。
- agent:仓库名称。
- 0.8:Tag、镜像标签(非必须,默认为 latest)。
将这个几个完全独立的概念组合一下:
- registry.cn-hangzhou.aliyuncs.com/acs/agent:仓库坐标。
- acs/agent:仓库全名(通常在 API 中使用)。
基本使用
本文档的重点是介绍 Docker 最常用的三个命令:login、pull、push。
docker login
以阿里云杭州公网 Registry 为例。
登录时必须指明 Registry 域名,并输入您的用户名和登录密码。
[backcolor=transparent]注意:此处的登录密码是您在
镜像仓库管理控制台 设置的,而不是您的阿里云登录密码。
- [backcolor=transparent]docker@default[backcolor=transparent]-[backcolor=transparent]online[backcolor=transparent]:~[backcolor=transparent]$ docker login registry[backcolor=transparent].[backcolor=transparent]cn[backcolor=transparent]-[backcolor=transparent]hangzhou[backcolor=transparent].[backcolor=transparent]aliyuncs[backcolor=transparent].[backcolor=transparent]com
- [backcolor=transparent]Username[backcolor=transparent]:[backcolor=transparent] sample@alibaba[backcolor=transparent]-[backcolor=transparent]inc[backcolor=transparent].[backcolor=transparent]com
- [backcolor=transparent]Password[backcolor=transparent]:
- [backcolor=transparent]Login[backcolor=transparent] [backcolor=transparent]Succeeded
登录成功之后会显示 Login Succeeded。
另外,您还可以通过查看 config.json 文件,确认您的登录信息。
- [backcolor=transparent]docker@default[backcolor=transparent]-[backcolor=transparent]online[backcolor=transparent]:~[backcolor=transparent]$ cat [backcolor=transparent]~[backcolor=transparent]/.docker/[backcolor=transparent]config[backcolor=transparent].[backcolor=transparent]json
- [backcolor=transparent]{
- [backcolor=transparent] [backcolor=transparent]"auths"[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]{
- [backcolor=transparent] [backcolor=transparent]"registry.cn-hangzhou.aliyuncs.com"[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]{
- [backcolor=transparent] [backcolor=transparent]"auth"[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"XXXXXXXXXXXXXXXXXXXXXX"
- [backcolor=transparent] [backcolor=transparent]}
- [backcolor=transparent] [backcolor=transparent]}
- [backcolor=transparent]}
docker pull
[backcolor=transparent]注意:
- 如果您要拉取 Docker 官方的镜像,参考下方相关链接中的加速器文档。
- 如果您要拉取公共仓库下的镜像,不登录 Registry 也是可以拉取的。
以容器服务的公共镜像 registry.cn-hangzhou.aliyuncs.com/acs/agent:0.8 为例。
- [backcolor=transparent]docker@default[backcolor=transparent]-[backcolor=transparent]online[backcolor=transparent]:~[backcolor=transparent]$ docker pull registry[backcolor=transparent].[backcolor=transparent]cn[backcolor=transparent]-[backcolor=transparent]hangzhou[backcolor=transparent].[backcolor=transparent]aliyuncs[backcolor=transparent].[backcolor=transparent]com[backcolor=transparent]/[backcolor=transparent]acs[backcolor=transparent]/[backcolor=transparent]agent[backcolor=transparent]:[backcolor=transparent]0.8
- [backcolor=transparent]0.8[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]Pulling[backcolor=transparent] [backcolor=transparent]from[backcolor=transparent] acs[backcolor=transparent]/[backcolor=transparent]agent
- [backcolor=transparent]5a026b6c4964[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]Already[backcolor=transparent] exists
- [backcolor=transparent]e4b621e8d9cb[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]Already[backcolor=transparent] exists
- [backcolor=transparent]8bc2fd04bdd4[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]Pull[backcolor=transparent] complete
- [backcolor=transparent]a977b0087b3e[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]Pull[backcolor=transparent] complete
- [backcolor=transparent]8f6e00ea13c6[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]Pull[backcolor=transparent] complete
- [backcolor=transparent]875dd8c9666f[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]Pull[backcolor=transparent] complete
- [backcolor=transparent]9c07bcabc35d[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]Pull[backcolor=transparent] complete
- [backcolor=transparent]Digest[backcolor=transparent]:[backcolor=transparent] sha256[backcolor=transparent]:[backcolor=transparent]cac848bd31bccf2a041bda7b57e3051341093abde6859df9ee9d332dfec6ddd9
- [backcolor=transparent]Status[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]Downloaded[backcolor=transparent] newer image [backcolor=transparent]for[backcolor=transparent] registry[backcolor=transparent].[backcolor=transparent]cn[backcolor=transparent]-[backcolor=transparent]hangzhou[backcolor=transparent].[backcolor=transparent]aliyuncs[backcolor=transparent].[backcolor=transparent]com[backcolor=transparent]/[backcolor=transparent]acs[backcolor=transparent]/[backcolor=transparent]agent[backcolor=transparent]:[backcolor=transparent]0.8
您可以使用下边的命令查看下载下来的镜像(注意仓库坐标和 Tag)。
- [backcolor=transparent]docker@default[backcolor=transparent]-[backcolor=transparent]online[backcolor=transparent]:~[backcolor=transparent]$ docker images
- [backcolor=transparent]REPOSITORY TAG IMAGE ID CREATED SIZE
- [backcolor=transparent]registry[backcolor=transparent].[backcolor=transparent]cn[backcolor=transparent]-[backcolor=transparent]hangzhou[backcolor=transparent].[backcolor=transparent]aliyuncs[backcolor=transparent].[backcolor=transparent]com[backcolor=transparent]/[backcolor=transparent]acs[backcolor=transparent]/[backcolor=transparent]agent [backcolor=transparent]0.8[backcolor=transparent] b9ba5841bdb0 [backcolor=transparent]24[backcolor=transparent] hours ago [backcolor=transparent]42.18[backcolor=transparent] MB
docker push
镜像在本地环境构建或是打包好之后,就可以推到 Registry。
前提条件是,您有对这个仓库的读写权限或是读写授权。否则您会看到下面的报错信息。
- [backcolor=transparent]docker@default[backcolor=transparent]-[backcolor=transparent]online[backcolor=transparent]:~[backcolor=transparent]$ docker push registry[backcolor=transparent].[backcolor=transparent]cn[backcolor=transparent]-[backcolor=transparent]hangzhou[backcolor=transparent].[backcolor=transparent]aliyuncs[backcolor=transparent].[backcolor=transparent]com[backcolor=transparent]/[backcolor=transparent]acs[backcolor=transparent]/[backcolor=transparent]agent[backcolor=transparent]:[backcolor=transparent]0.8
- [backcolor=transparent]The[backcolor=transparent] push refers to a repository [backcolor=transparent][[backcolor=transparent]registry[backcolor=transparent].[backcolor=transparent]cn[backcolor=transparent]-[backcolor=transparent]hangzhou[backcolor=transparent].[backcolor=transparent]aliyuncs[backcolor=transparent].[backcolor=transparent]com[backcolor=transparent]/[backcolor=transparent]acs[backcolor=transparent]/[backcolor=transparent]agent[backcolor=transparent]]
- [backcolor=transparent]359f80267111[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]Layer[backcolor=transparent] already exists
- [backcolor=transparent]7e5fa28d90b8[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]Layer[backcolor=transparent] already exists
- [backcolor=transparent]b20d7f600f63[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]Layer[backcolor=transparent] already exists
- [backcolor=transparent]4a159b4f8370[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]Layer[backcolor=transparent] already exists
- [backcolor=transparent]7c3712ebe877[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]Layer[backcolor=transparent] already exists
- [backcolor=transparent]d91d130a53aa[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]Layer[backcolor=transparent] already exists
- [backcolor=transparent]fcad8ad5a40f[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]Layer[backcolor=transparent] already exists
- [backcolor=transparent]unauthorized[backcolor=transparent]:[backcolor=transparent] authentication required
FAQ
docker login 失败
主要需要排查以下两种可能。
您使用了阿里云账户的登录密码,而不是 Registry 的独立登录密码。Registry 的登录密码是在 镜像仓库管理控制台 上设置与修改的。

您使用了 sudo 进行登录。使用 sudo 时,系统第一个要求输入的密码是 Linux 的用户密码。您可能在这里输入了 Registry 的登录密码,导致登录操作失败。
区分这个错误的方式很简单,Linux 的用户密码大多允许尝试三次,错误时会提示 try again。而 Registry 的登录密码错误一次之后就会退出,并返回以下错误。
-
[backcolor=transparent]
Error[backcolor=transparent]
response [backcolor=transparent]
from[backcolor=transparent]
daemon[backcolor=transparent]
:[backcolor=transparent]
[backcolor=transparent]
Get[backcolor=transparent]
https[backcolor=transparent]
:[backcolor=transparent]
//registry.cn-hangzhou.aliyuncs.com/v2/: unauthorized: authentication required
docker pull 失败,提示 Error: image xxx not found
主要的排查步骤。
如果您下载的是公共仓库,那么问题应该为镜像地址不正确。请在 镜像仓库管理控制台 搜索一下这个公共仓库,检查一下想要下载的这个镜像版本是不是真实存在。
您想要下载一个私有仓库中的镜像,这时首先确认一下 Registry 的登录状态。运行下边的命令,可以看到所有登录的 Registry 域名。
-
[backcolor=transparent]
cat [backcolor=transparent]
~[backcolor=transparent]
/.docker/[backcolor=transparent]
config[backcolor=transparent]
.[backcolor=transparent]
json
查看里面是不是包括您想要下载镜像的 Registry 域名。如果没有的话,您需要先进行登录操作。
如果显示已经登录的话,那么您需要确认您登录的这个账户是否有权限下载这个镜像。子账户默认没有任何权限,参见下方相关链接中主子账户授权的文档。
docker push 失败
主要的排查步骤和 docker pull 基本一致,仅仅是授权要求的级别较 pull 更高一些。