使用私有注册表在 docker 拉取上"tag latest not found"



我在提取推送到私有注册表的图像并获得

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

我正在使用 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

但是当尝试从另一台服务器运行或拉取它时,我得到"找不到最新标记"

# 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

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

问题 1

这将是您的远程私有注册表中的问题,这已通过您的命令确认

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

问题2

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

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

$ docker images

溶液

检查您的 docker 私有注册表设置并跟踪日志以查看问题所在,如果要完全解决它,则需要在远程私有注册表中附加更多调试信息。

还有远程注册表设置如何像版本和平台一样。

最新更新