我想问为什么在提取docker映像时需要同时指定名称和摘要?
docker pull ubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
仅通过摘要还是在整个docker存储库的上下文中摘要不够独特是不够的吗?
例如这样的
docker pull sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
答案 0 :(得分:2)
您必须将 image 选项传递给命令,如下所示:
docker image pull [OPTIONS]名称:[TAG @ DIGEST]
例如:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:b64="https://github.com/ilyakharlamov/xslt_base64"
version="1.0">
<xsl:import href="xml-to-string.xsl"/>
<xsl:output method="text" encoding="utf-8" />
<xsl:strip-space elements="*"/>
<xsl:include href="base64.xsl"/>
<xsl:template match="/">
<xsl:call-template name="b64:encode" >
<xsl:with-param name="asciiString">
<xsl:apply-templates select="." mode="xml-to-string" />
</xsl:with-param>
</xsl:call-template>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
注册表API具有很多实现,因此您可以拥有多个注册表服务器(Docker Hub,自托管解决方案(如Harbor)以及其他商业托管选项,包括Github和Gitlab)。注册表API本身是围绕向存储库发出请求而构造的,因此,您不能仅提取摘要,不仅需要知道要与哪个注册表服务器通信,还要知道要从该服务器上提取哪个存储库名称。
api for a pull将请求:
GET /v2/<name>/manifests/<reference>
名称和参考参数标识图像,并且是必需的。参考可能包含标签或摘要。
(该文档中引用的“名称”是存储库名称。)
docker命令反映了此API设计,要求提供映像名称。如果不使用标签或摘要,它将使用“最新”作为默认值。取消注册表名称时,它默认为Docker Hub。而且,如果您还保留了一个用户名,则它会以library/
作为注册表名称的前缀,所有正式镜像都位于Docker Hub上。
因此,对ubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
的拉取请求将变成对registry-1.docker.io
的{{1}}(Docker Hub的注册表API服务器)的请求,并参考您列出的sha256。
尝试从拉取中删除存储库名称将导致语法无效(docker将其称为参考格式),因为它无法从一无所有推断存储库,并且没有默认存储库名称。
答案 2 :(得分:-1)
摘要在docker存储库中的所有映像中可能是唯一的,但是您认为更常见的用法是什么?是拉名为ubuntu
的图像还是拉名为sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
的图像?
使用摘要进行拉动也不常见。使用图像标签。
例如:docker pull ubuntu:16.04
答案 3 :(得分:-2)
图像从注册表中提取。映像名称包括注册表,例如quay.io/yourgroup/yourimage
从quay.io
服务器提取。
您说ubuntu
不包括服务器名称吗?
如果没有服务器名称,则默认为Docker Hub,也称为docker.io
。因此,ubuntu
与docker.io/library/ubuntu
相同。
因此,您需要输入名称,以便它知道要与哪个图像注册表服务器通信。