Docker pull 静默忽略镜像设置

Docker pull 静默忽略镜像设置

我正在尝试设置一个 docker 环境,其中使用本地不安全的镜像来加快速度。由于它只是一个本地实验室环境,因此不安全也没关系。

我使用 Sonatype Nexus Repository Manager OSS 3.35.0-02 作为本地镜像。

我已经根据文档设置了docker配置,如下所示:

{
  "registry-mirrors": ["http://192.168.8.10:8181"], 
  "insecure-registries": ["192.168.8.10:8181"]
}

docker info似乎确认设置已经加载:

Registry: https://index.docker.io/v1/
 Labels:
Experimental: false
Insecure Registries:
 192.168.8.10:8181
 127.0.0.0/8
Registry Mirrors:
 http://192.168.8.10:8181/

现在,我可以测试 Nexus 是否正常工作,因为这个有效:

docker rmi alpine:3.13.3 ; docker pull 192.168.8.10:8181/alpine:3.13.3

从某种意义上说,图像已被下载,我可以看到它出现在 Nexus 仓库中。

但运行普通命令:

docker rmi alpine:3.13.4 ; docker pull alpine:3.13.4

由于图像已下载,因此似乎绕过了镜像,但它并未出现在 Nexus 存储库中。

这种情况发生在 macOS BigSur 11.5.1 + Docker Desktop 1.4.0 和运行 Ubuntu Server 20.04(Docker 版本 20.10.7、构建 20.10.7-0ubuntu1~20.04.2)的 Vagrant VM 上。

谢谢。

答案1

虽然我还没有以一种干净的方式解决问题,但我找到了一种解决方法。在镜像名称前面加上镜像名称可以使拉取操作与镜像一起正常工作,但问题是镜像标签保留了镜像名称,即:

$ docker pull 192.168.8.10:8181/alpine:3.13.4
$ docker image ls
REPOSITORY                         TAG               IMAGE ID         CREATED         SIZE
192.168.8.10:8181/alpine           3.13.4            49f356fa4513   2 years ago     5.61MB

但是我可以通过在拉取图像后添加一个干净的标签并删除“脏”标签来解决这个问题:

$ docker image tag 192.168.8.10:8181/alpine:3.13.4 alpine:3.13.4
$ docker image rm 192.168.8.10:8181/alpine:3.13.4
$ docker image ls
REPOSITORY                       TAG               IMAGE ID       CREATED         SIZE
alpine                           3.13.4            49f356fa4513   2 years ago     5.61MB

答案2

您的图片名称错误。没有等效名称:

192.168.8.10:8181/alpine:3.13.3

在 Docker Hub 上。当你拉取时alpine:3.13.4,实际上是在拉取docker.io/library/alpine:3.13.4。因此你的镜像需要有以下镜像:

192.168.8.10:8181/library/alpine:3.13.3

注册表镜像的设计是当镜像发生故障时始终转向上游源。这些是镜像,而不是访问控制系统。

相关内容