首页 > 解决方案 > Docker 注册表镜像

问题描述

我正在尝试将 docker 镜像设置为拉/推图像的默认镜像。

根据文档,我已经使用以下内容设置了文件 /etc/docker/daemon.json:

{
  "registry-mirrors": ["https://localregistry"]
}

然后我尝试以下方法:

docker login localregistry
docker pull localregistry/image:tag > it works
docker pull image:tag > doesn't work

我总是"no basic auth credentials error"从 docker 守护进程中获取信息,但是从注册表日志中我得到了err.code="manifest unknown" err.detail="unknown tag"

任何想法?我正在使用 docker 版本 19.03.08

标签: dockerdocker-registry

解决方案


docker login localregistry

首先,我希望这是更改问题的名称,因为注册表名称localregistry不起作用......

docker pull localregistry/image:tag > it works

这工作的事实表明您可能有一个注册表名称,主机名中带有.:。否则 docker 会尝试从Docker Hub 上localregistry/image:tag的用户那里拉取数据。localregistry

docker pull image:tag > doesn't work

这应该总是有效的,如果它真的是 Docker Hub 的镜像,那么故障对用户应该是透明的。发生的情况是将名称解析为docker.io/library/image:tag,首先尝试从 中提取localregistry/library/image:tag,然后任何错误都回退到从 Docker Hub 中提取,并且最终向用户显示任何错误。

最有可能的问题是您没有library将图像的存储库名称包含在本地注册表中。

如果您使用它来包含 Docker Hub 上不存在的图像,那么我将跳过镜像并简单地明确引用镜像。否则会为不易察觉的非直觉失败创造许多机会。例如,可以将陈旧的镜像推送到您的镜像来代替上游镜像,并且 Docker 将停止从上游拉取更新。而且由于任何镜像错误都会退回到 Hub,如果您使用无法控制上游的图像名称,其他人可能会在 Hub 上使用该名称并开始将未知甚至恶意图像注入您的服务器。

如果这不能回答您的问题,那么我建议您使用实际图像名称和日志中的错误消息来显示具体失败的问题(您可以屏蔽部分必要的注册表名称)。


推荐阅读