当前位置: 首页 > 知识库问答 >
问题:

使用私有注册表在docker pull上“未找到最新标签”

法风畔
2023-03-14

我无法将图像推送到私人注册表并获取:

在存储库中找不到最新标签

我正在使用Docker提供的默认注册表容器:

# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
registry            latest              7e2db37c6564        8 days ago          411.6 MB
janos/wheezy        latest              900e813f1fd9        11 months ago       218.6 MB

作为测试,假设我想有一个本地版本的喘息声:

# docker tag janos/wheezy staging-docker.mysite.nl/myself/wheezy
# docker push staging-docker.mysite.nl/myself/wheezy
The push refers to a repository [staging-docker.mysite.nl/myself/wheezy] (len: 1)
Sending image list
Pushing repository staging-docker.mysite.nl/myself/wheezy (1 tags)
7af801e4faa1: Pushing [==================================================>] 226.3 MB/226.3 MB
2014/11/21 16:06:38

图像似乎就在那里:

# docker images
REPOSITORY                             TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
registry                               latest              7e2db37c6564        8 days ago          411.6 MB
staging-docker.mysite.nl/myself/wheezy   latest              900e813f1fd9        11 months ago       218.6 MB
janos/wheezy                           latest              900e813f1fd9        11 months ago       218.6 MB

在当地我可以开始:

# docker run -i -t staging-docker.mysite.nl/myself/wheezy /bin/bash
root@6b5fafe61d88:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  selinux  srv  sys  tmp  usr  var
root@6b5fafe61d88:/# exit

但当试图运行或从另一台服务器上拉取它时,我会得到“Tag latest not found”

# docker pull staging-docker.mysite.nl/myself/wheezy
Pulling repository staging-docker.mysite.nl/myself/wheezy
2014/11/21 16:08:15 Tag latest not found in repository staging-docker.mysite.nl/myself/wheezy

显式添加“最新”没有帮助。同样的错误。

我可以看到调用到达注册表,所以我不会无意中使用另一个:

172.17.42.1 - - [21/Nov/2014:15:08:15 +0000] "GET /v1/_ping HTTP/1.0" 200 1439 "-" "Go 1.1 package http"
172.17.42.1 - - [21/Nov/2014:15:08:15 +0000] "GET /v1/_ping HTTP/1.0" 200 1439 "-" "Go 1.1 package http"
21/Nov/2014:15:08:15 +0000 DEBUG: args = {'namespace': u'myself', 'repository': u'wheezy'}
172.17.42.1 - - [21/Nov/2014:15:08:15 +0000] "GET /v1/repositories/myself/wheezy/images HTTP/1.0" 200 164 "-" "docker/1.3.1 go/go1.3.3 git-commit/4e9bbfa kernel/3.16.0-0.bpo.2-amd64 os/linux arch/amd64"
21/Nov/2014:15:08:15 +0000 DEBUG: args = {'namespace': u'myself', 'repository': u'wheezy'}
21/Nov/2014:15:08:15 +0000 DEBUG: [get_tags] namespace=myself; repository=wheezy
172.17.42.1 - - [21/Nov/2014:15:08:15 +0000] "GET /v1/repositories/myself/wheezy/tags HTTP/1.0" 200 2 "-" "docker/1.3.1 go/go1.3.3 git-commit/4e9bbfa kernel/3.16.0-0.bpo.2-amd64 os/linux arch/amd64"

并且手动检查图像的标签时,它们确实是空的:

# curl -k https://staging-docker.mysite.nl/v1/repositories/myself/wheezy/tags
{}

问题1:既然Docker总是使用最新的。。。

问题2:如果事情搞砸了,最新的标签确实不见了,为什么我还能在本地启动它?

Docker上的两个版本都相同:

# docker version 
Client version: 1.3.1
Client API version: 1.15
Go version (client): go1.3.3
Git commit (client): 4e9bbfa
OS/Arch (client): linux/amd64
Server version: 1.3.1
Server API version: 1.15
Go version (server): go1.3.3
Git commit (server): 4e9bbfa

共有2个答案

邢思淼
2023-03-14

问题1:

这应该是您的远程私人注册表中的问题,这已由您的命令确认

curl -k https://staging-docker.mysite.nl/v1/repositories/myself/wheezy/tags

问题二

tag只是docker镜像的别名,如果你在本地以不同的命名运行,它们都是从同一个docker镜像运行的,没有区别。

标签latest不会在本地丢失,这是由您的命令确认的

$ docker images

解决方案

检查docker private registry设置并跟踪日志以查看问题所在,如果要彻底解决问题,需要在远程private registry中附加更多调试信息。

以及远程注册表设置的版本和平台。

百里默
2023-03-14

我注意到Docker客户端失败消息并不总是反映根本原因。我见过当docker客户端未与服务器进行身份验证时发生这种情况,或者当SSL握手因某种原因失败时也会发生这种情况。鉴于您没有使用--insecure-注册表,听起来像是后者。

 类似资料:
  • 我正在尝试将一个图像推送到我的docker私有存储库: Docker告诉我: push引用存储库[living-registry.com:5000/busybox]Get https://living-registry.com:5000/v1/_ping:read tcp 195.83.122.16:39714->195.83.122.16:5000:read:对等体重置连接 这些命令正在Core

  • 我现在收到的每一条消息都会出现以下错误: 1437425804:未注册标识符为“未找到默认值”的图标 仅当后端用户登录时,才会发生此错误。对于刚刚访问网站(没有后端用户登录会话)的用户来说,网站工作正常。 我不知道有一个带有标识符的图标,也不知道从哪里开始调试。扩展扫描仪看起来不错。有人给我一个提示吗? 编辑 这是错误的回溯: Fri,19 Mar2021 12:28:52 0100[关键]请求=

  • 我在用户X和存储库名称Y下有一个私有存储库: https://github.com/X/Y 这是一个用Gradle构建的Java项目。 Gradle配置文件已按照官方Github软件包注册表文档中的说明进行配置,我能够成功发布我的软件包: https://help.github.com/en/articles/configuring-gradle-for-use-with-github-packa

  • 问题内容: 我创建了两个Docker容器。第一个提供专用的Docker注册表,第二个提供官方Docker注册表的镜像: 现在,我想将两者结合起来。每当用户 提取 图像时,都应首先查询私有注册表,然后查询镜像。当图像被 推送时, 它们仅应被推送到私有注册表。 我不知道如何做到这一点。任何帮助表示赞赏。 问题答案: 您不能仅仅强制所有 docker push 命令推送到您的私有注册表。原因之一是您可以

  • 我正在尝试设置一个私有docker注册表,由一个反向nginx代理保护,该代理通过客户端证书验证用户。 我得到的错误是: x509:由未知机构签署的证书 根据文档,您应该能够将证书添加到/etc/docker/certs中。我已经这么做了。Docker似乎看到了证书的位置: EBU[0015]呼叫POST/v1。24/图像/创建?fromImage=docker。矮人。组织/名册 我还尝试从myd

  • 我可以在Resources->Registrys中定义azure注册表凭据并对其进行身份验证以创建工作负载。(工作负载访问私有azure注册表,并使用凭据集对其进行身份验证) 现在,如果我创建一个Helm图表,访问同一个私有Azure注册表来提取映像并创建一个pod,它会失败,表示无法提取docker映像。我对此进行了研究,发现K8s部署可以找到Rancher UI中设置的凭据,但kublet没有