全部产品
云市场

镜像基本操作

更新时间:2019-05-24 11:08:41

本文档的重点是介绍 Docker 最常用的三个命令:login、pull、push。

注意:您可以查看基本概念了解镜像服务的基本术语。

docker login

以阿里云杭州公网 Registry 为例。

登录时必须指明 Registry 域名,并输入您的用户名和登录密码。

注意:此处的登录密码是您在 镜像仓库管理控制台 设置的,而不是您的阿里云登录密码。

1

  1. docker@default-online:~$ docker login registry.cn-hangzhou.aliyuncs.com
  2. Username: sample@alibaba-inc.com
  3. Password:
  4. Login Succeeded

登录成功之后会显示 Login Succeeded

另外,您还可以通过查看 config.json 文件,确认您的登录信息。

  1. docker@default-online:~$ cat ~/.docker/config.json
  2. {
  3. "auths": {
  4. "registry.cn-hangzhou.aliyuncs.com": {
  5. "auth": "XXXXXXXXXXXXXXXXXXXXXX"
  6. }
  7. }
  8. }

子账户如何登陆

  1. 使用子账户登录容器镜像服务控制台,设置一下自己的Registry登录密码。
  2. 使用[子账户名]@[企业别名]作为用户名进行登录。

    您可以在RAM控制台设置和查看主账户的企业别名。如果没有企业别名,企业别名默认为主账户的UID。

举例:

子账户名为subaccount,企业别名为misaka-network

  1. docker@default-online:~$ docker login registry.cn-hangzhou.aliyuncs.com
  2. Username: subaccount@misaka-network
  3. Password:
  4. Login Succeeded

docker pull

注意:

  • 如果您要拉取Docker官方的镜像,参考下方相关链接中的加速器文档。
  • 如果您要拉取公共仓库下的镜像,不登录Registry也是可以拉取的。
  • 登录的Registry和您操作镜像的Registry必须保持一致。例如只登录registry.cn-hangzhou.aliyuncs.com的情况下,推送registry.cn-beijing.aliyuncs.com的镜像,客户端会出现未授权的错误信息。

以容器服务的公共镜像 registry.cn-hangzhou.aliyuncs.com/acs/agent:0.8 为例。

  1. docker@default-online:~$ docker pull registry.cn-hangzhou.aliyuncs.com/acs/agent:0.8
  2. 0.8: Pulling from acs/agent
  3. 5a026b6c4964: Already exists
  4. e4b621e8d9cb: Already exists
  5. 8bc2fd04bdd4: Pull complete
  6. a977b0087b3e: Pull complete
  7. 8f6e00ea13c6: Pull complete
  8. 875dd8c9666f: Pull complete
  9. 9c07bcabc35d: Pull complete
  10. Digest: sha256:cac848bd31bccf2a041bda7b57e3051341093abde6859df9ee9d332dfec6ddd9
  11. Status: Downloaded newer image for registry.cn-hangzhou.aliyuncs.com/acs/agent:0.8

您可以使用下边的命令查看下载下来的镜像(注意仓库坐标和Tag)。

  1. docker@default-online:~$ docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. registry.cn-hangzhou.aliyuncs.com/acs/agent 0.8 b9ba5841bdb0 24 hours ago 42.18 MB

docker push

镜像在本地环境构建或是打包好之后,就可以推到Registry。

推送的准备工作和拉取基本一样。

需要确认您有对这个仓库的读写权限或是读写授权。否则您会看到下面的报错信息。

  1. docker@default-online:~$ docker push registry.cn-hangzhou.aliyuncs.com/acs/agent:0.8
  2. The push refers to a repository [registry.cn-hangzhou.aliyuncs.com/acs/agent]
  3. 359f80267111: Layer already exists
  4. 7e5fa28d90b8: Layer already exists
  5. b20d7f600f63: Layer already exists
  6. 4a159b4f8370: Layer already exists
  7. 7c3712ebe877: Layer already exists
  8. d91d130a53aa: Layer already exists
  9. fcad8ad5a40f: Layer already exists
  10. unauthorized: authentication required

FAQ

docker login失败

主要需要排查以下两种可能。

  • 您使用了阿里云账户的登录密码,而不是Registry的独立登录密码。Registry的登录密码是在容器镜像服务管理控制台 上设置与修改的。

2

  • 您使用了sudo进行登录。使用sudo时,系统第一个要求输入的密码是Linux的用户密码。您可能在这里输入了Registry的登录密码,导致登录操作失败。

    区分这个错误的方式很简单,Linux的用户密码大多允许尝试三次,错误时会提示try again。而Registry的登录密码错误一次之后就会退出,并返回以下错误。

    1. Error response from daemon: Get https://registry.cn-hangzhou.aliyuncs.com/v2/: unauthorized: authentication required

docker pull 失败,提示 Error: image xxx not found

主要的排查步骤。

  • 如果您下载的是公共仓库,那么问题应该为镜像地址不正确。请在 容器镜像服务管理控制台 搜索一下这个公共仓库,检查一下想要下载的这个镜像版本是不是真实存在。

  • 您想要下载一个私有仓库中的镜像,这时首先确认一下Registry的登录状态。运行下边的命令,可以看到所有登录的Registry域名。

    1. cat ~/.docker/config.json

    查看里面是不是包括您想要下载镜像的Registry域名。如果没有的话,您需要先进行登录操作。

    如果显示已经登录的话,那么您需要确认您登录的这个账户是否有权限下载这个镜像。子账户默认没有任何权限,参见下方相关链接中主子账户授权的文档。

    提示Error: filesystem layer verification failed for digest

    极少数情况下偶现,下载的块文件检验失败。一般重试可以解决。

docker push 失败

提示denied: requested access to the resource is denied

主要的排查步骤和docker pull基本一致,仅仅是授权要求的级别较pull更高一些。

附录

容器镜像服务控制台