Docker镜像名称如何解析?

Docker镜像名称如何解析?,第1张

Docker镜像名称如何解析?

TL; DR:主机名必须在第

.
一个主机名之前包含dns分隔符或
:
端口分隔符
/
,否则代码假定您要使用默认注册表


在仔细研究了代码之后,我遇到了distribution / reference /
reference.go
,内容如下:

// Grammar////  reference := name [ ":" tag ] [ "@" digest ]//  name      := [hostname '/'] component ['/' component]*//  hostname  := hostcomponent ['.' hostcomponent]* [':' port-number]//  hostcomponent        := /([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])///  port-number          := /[0-9]+///  component := alpha-numeric [separator alpha-numeric]*//  alpha-numeric        := /[a-z0-9]+///  separator := /[_.]|__|[-]*/////  tag       := /[w][w.-]{0,127}/////  digest    := digest-algorithm ":" digest-hex//  digest-algorithm     := digest-algorithm-component [ digest-algorithm-separator digest-algorithm-component ]//  digest-algorithm-separator      := /[+.-_]///  digest-algorithm-component      := /[A-Za-z][A-Za-z0-9]*///  digest-hex:= /[0-9a-fA-F]{32,}/ ; At least 128 bit digest value

实际的实现是通过distribution / reference /
regexp.go中的regex实现的。

但是经过一番摸索之后,我发现除了该正则表达式外还有另一项检查(如果不包含a

.
或,则会出现大写主机名错误
:
)。我在docker /
distribution / reference /
normalize.go中将名称的实际拆分跟踪到以下内容:

// splitDockerDomain splits a repository name to domain and remotename string.// If no valid domain is found, the default domain is used. Repository name// needs to be already validated before.func splitDockerDomain(name string) (domain, remainder string) {    i := strings.IndexRune(name, '/')    if i == -1 || (!strings.ContainsAny(name[:i], ".:") && name[:i] != "localhost") {        domain, remainder = defaultDomain, name    } else {        domain, remainder = name[:i], name[i+1:]    }    if domain == legacyDefaultDomain {        domain = defaultDomain    }    if domain == defaultDomain && !strings.ContainsRune(remainder, '/') {        remainder = officialReponame + "/" + remainder    }    return}

对我而言,重要的部分是检查if语句中的第一个

.
:
第一个之前的and
/
。有了它,主机名就会从first之前分离出来
/
,而没有它,整个名字将被传递给默认的注册表主机名。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5019597.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-11-15
下一篇2022-11-15

发表评论

登录后才能评论

评论列表(0条)

    保存