Docker官方仓库(Docker Hub)URL

124

Docker Hub官方网站已经迁移到https://registry.hub.docker.com,从https://hub.docker.com/

如果尝试从以下URL获取映像docker pull registry.hub.docker.com/busybox ,则会显示:

registry.hub.docker.com/busybox: this image was pulled from a legacy registry.  
Important: This registry version will not be supported in future versions of docker.

但如果我使用 docker pull registry.hub.docker.com/busybox

它无法拉取映像。

当使用 curl -k https://registry.hub.docker.com/v1/repositories/busybox/tags 时,情况相同。

2022/Q3更新:使用docker.io,例如docker.io/nginx。

8个回答

122

5
我同意使用 docker.io 看起来是最安全的 URL 选择(未来最不可能更改或出现错误)。 注册表文档 表示,“docker pull ubuntu ...” 只是 “docker pull docker.io/library/ubuntu” 命令的简写。 - wisbucky
1
docker.io可以直接使用 - The Tran

121

官方镜像的注册表路径(名称中不带斜杠)为library/<image>。请尝试使用此方法代替:

docker pull registry.hub.docker.com/library/busybox

11
个人形象有什么想法吗?我的意思是针对<用户>/<图像>容器,是否有完整URL的帮助? - José Ibañez
2
@JoséIbañez,你尝试过 docker pull registry.hub.docker.com/<user>/<image> 吗? - forzagreen
4
使用的URL是docker pull index.docker.io/library/busybox - dtheodor
33
我认为使用docker.io比使用registry.hub.docker.comindex.docker.io等更安全,因为它是最通用的别名。注册表文档表示"docker pull ubuntu...只是docker pull docker.io/library/ubuntu命令的简写"。 - wisbucky
1
@wisbucky 哦我的天啊,谢谢你。我的好啊,为什么这么难找呢。 - Christian Matthew

39
这个答案对于“Docker Desktop”无效,其中的“Registry”键不会出现。这可能适用于最新版本的“前身”Docker引擎 - 如果是这种情况,请给我留言。

Docker 引擎

您可以使用 docker info 命令获取当前的注册表 URL:

...
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
...

这也是您可以使用的URL来运行您自己托管的注册表:
docker run -d -p 5000:5000 --name registry -e REGISTRY_PROXY_REMOTEURL=https://index.docker.io registry:2

*ix朋友们,使用grep并立即使用它:
$ echo $(docker info | grep -oP "(?<=Registry: ).*")
https://index.docker.io/v1/

4
考虑到注册表的URL可能会在未来更改,使用 docker info 看起来是最安全的方法。 - Raedwald
1
没错,@Raedwald。此外,在Windows上docker info是可行的,而grep则不行。 - Roberto C. Rodriguez-Hidalgo
谢谢你的提示@RobertoC.Rodriguez-Hidalgo,我起草了一个Windows版本的命令。不幸的是,我无法进行测试(没有可用的Windows)。 - Florian Neumann
该URL实际上是一个索引服务器地址。一段时间以前,似乎在索引服务器和注册表之间存在差异。但现在我不确定了。无论如何,我得到的响应是404。尽管使用/v2/可以工作。这听起来很可疑。我会使用docker使用的那个。那就是registry-1.docker.io。请参见我的答案。 - x-yuri
1
这里涉及到一些兼容性问题。许多源代码依赖于目前的工作方式。但他们计划改变一些东西。更多信息请参见此处。关于404,我是指你回答中的确切URL。您可以使用index.docker.io的注册表API,但/v1/会导致404错误。而源代码使用registry-1.docker.io(例如docker pull)。因此,我认为后者更可取。 - x-yuri
显示剩余2条评论

15

赞成这个解决方案,当使用kubernetes secret时非常有用。官方文档指出https://index.docker.io/v1/确实是要使用的dockerhub网址。参见:https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/#create-a-secret-by-providing-credentials-on-the-command-line - Shawn
1
pull 中不应指定 v2,因此只需使用例如 docker | podman | crictl pull index.docker.io/hello-world - vorburger
为什么 https://index.docker.io/v1/ 已经崩了,但我在输入 docker info 时还能看到它?Docker 的文档写得真是太笨拙了。 - Andrius

8
tl;dr:使用 registry-1.docker.io 发送 API 请求,使用 docker.io 进行 docker pull 操作。
情况比较棘手,并且有计划在未来解决这个问题。在这里我知道3个相关的域名:
  • index.docker.io旧版?)
  • docker.io
  • registry-1.docker.io
你可以使用任何一个进行docker pull操作:
  • docker pull index.docker.io/library/alpine
  • docker pull docker.io/library/alpine
  • docker pull registry-1.docker.io/library/alpine
“index.docker.io”和“docker.io”被视为相同的(前者会被替换为后者)。
在所有三种情况下,“registry-1.docker.io”用于连接到注册表。在前两种情况下,那是默认注册表URL。在第三种情况下,“registry-1.docker.io”则直接使用。
然后,要使用注册表 API,您可以使用index.docker.ioregistry-1.docker.iodocker.io不起作用)。例如:
$ curl -sSv https://registry-1.docker.io/v2/

此文段的英译中:

另外,显然这些域名将来会更改

docker.io 最常用于 docker pull 的上下文中。 index.docker.io 似乎是回到了 Docker Hub 被称为 Docker Index 和一个索引服务器(搜索镜像)的概念。实际上,这可能是该域名的主要目的:

https://index.docker.io/v1/search/

“Searching” 不是 Docker Registry 规范的一部分,也不是它的泛化/后继规范 OCI 分发规范 的一部分。

1

只需要执行 docker pull busybox 命令,您是否正在使用最新版本的 docker 客户端。我认为他们停止支持低于1.5版本的客户端。

顺便提一下,那个curl命令对我有效:

$ curl -k https://registry.hub.docker.com/v1/repositories/busybox/tags
[{"layer": "fc0db02f", "name": "latest"}, {"layer": "fc0db02f", "name": "1"}, {"layer": "a6dbc8d6", "name": "1-ubuntu"}, {"layer": "a6dbc8d6", "name": "1.21-ubuntu"}, {"layer": "a6dbc8d6", "name": "1.21.0-ubuntu"}, {"layer": "d7057cb0", "name": "1.23"}, {"layer": "d7057cb0", "name": "1.23.2"}, {"layer": "fc0db02f", "name": "1.24"}, {"layer": "3d5bcd78", "name": "1.24.0"}, {"layer": "fc0db02f", "name": "1.24.1"}, {"layer": "1c677c87", "name": "buildroot-2013.08.1"}, {"layer": "0f864637", "name": "buildroot-2014.02"}, {"layer": "a6dbc8d6", "name": "ubuntu"}, {"layer": "ff8f955d", "name": "ubuntu-12.04"}, {"layer": "633fcd11", "name": "ubuntu-14.04"}]

有趣的是,如果你嗅探头部,你会得到一个HTTP 405错误(方法不允许)。我认为这可能与Docker已经弃用了他们的Registry API有关。

我知道我可以使用docker pull busybox。但在我的情况下,我使用curl获取一些信息。但我担心它将来会被删除。因此,我必须检查哪个URL是最新的。 - Ertuğrul Altınboğa
现在,curl命令的响应是410 GONE。 - x-yuri

1

对于那些想要在使用fabric8 maven插件时明确声明他们正在从dockerhub获取镜像的人,可以添加一个新属性:<docker.pull.registry>registry.hub.docker.com/library</docker.pull.registry>

我来到这个页面是为了解决在使用fabric8构建Docker镜像时从我的AWS ECR注册表中拉取的问题。


fabric8已经停止维护。 - ᐅdevrimbaris

0
请使用这个工具:

https://github.com/amjad489/docker-pull-push

docker-pull-push -s docker.elastic.co/elasticsearch/elasticsearch:7.13 -t AWS_ACCOUNT_ID.dkr.ecr.us-east-1.amazonaws.com/elasticsearch:7.13.3

Usage:
  docker-pull-push [flags]

Flags:
  -p, --awsProfile string     AWS profile (default "default")
  -l, --awsRegion string      AWS Region (default "us-east-1")
  -h, --help                  help for docker-pull-push
  -r, --registryType string   ECR (default "docker")
  -s, --sourceImage string    docker.elastic.co/elasticsearch/elasticsearch:7.13
  -t, --targetImage string    AWS_ACCOUNT_ID.dkr.ecr.us-east-1.amazonaws.com/elasticsearch:7.13.3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接