Docker 从 Nexus 代理拉取 来自守护程序的错误响应:未知:未知

Docker pull from Nexus proxy Error response from daemon : unknown: unknown

配置 Nexus docker 注册表和代理后 "dockerhub-proxy" 如下所述:

我可以在 docker 登录后将图像推送到 nexus 注册表,但无法通过 nexus 代理 "dockerhub-proxy" 从 docker 集线器中提取图像,并且错误没有提供详细信息:

来自守护程序的错误响应:未知:未知

这是针对 Docker 桌面 Windows 上的 docker 守护进程客户端 运行 :

版本 2.0.0.3 (31259) 渠道:稳定 构建:8858db3 引擎:18.09.2

我已经通过 docker 客户端从 Linux EC2 实例尝试过,它运行良好:

[root@ip-host-daemon docker]# docker pull ip_nexus_host:port_http_connector_nexus_proxy/mongo Using default tag: latest latest: Pulling from mongo Digest: sha256:29d7ca01f9b7e3812a831ff143620e93ddf5e34bb9ac672d91140e064158a0fc Status: Downloaded newer image for ip_nexus_host:port_http_connector_nexus_proxy/mongo:latest

我不知道为什么在 windows 上它不起作用

PS C:\Dev\workspace> docker push my_dns/nexus/repository/dockerhub-proxy/image-name:1.0.1 The push refers to repository [my_dns/nexus/repository/dockerhub-proxy/image-name] 0bca66726bc2: Pushed 1.0.1: digest: sha256:0736228548d13e8d39fba5a0ed5cd8a7719074318fe9f8ddfc395fd454afc01f size: 528 PS C:\Dev\workspace> docker pull my_dns/nexus/repository/dockerhub-proxy/mysql:latest **Error response from daemon: unknown: unknown**

我正在寻找通过 Docker Windows 客户端守护程序从 Docker Hub 拉取官方 docker 图像的能力,例如 mongo通过在 Nexus OSS 上配置的 Nexus 代理,并通过 http 连接器暴露到 Nexus 组(包含主机和代理),Nexus OSS 托管在 AWS EC2 linux 实例 VPC/private 子网上,没有任何 [=67] =] hostname/EIP 但通过 ELB/ALB.

感谢您的帮助

根据这篇文章:

https://support.sonatype.com/hc/en-us/articles/115013153887-Docker-Repository-Configuration-and-Client-Connection

您的 Nexus 通过以下语法公开可供 docker CLI 访问的 HTTP(S) 连接器:

docker pull <nexus-hostname>:<port_nexus_docker_group>/<dockerHubImage>:<officialTag>
docker push <nexus-hostname>:<port_nexus_docker_host>/<yourImage>:<yourTag>

如果你的 Nexus 在你的 VPC 中有 public DNS,很明显,只需打开你的 EC2 实例托管和 运行 Nexus 服务器的安全组上的每个端口,以允许来自你的入站网络流量IP range/CIDR 来源。

如果您的 Nexus 在您的 VPC 的私有子网中有私有 IP,只需在 public 子网上的同一 VPC 上在它前面放置一个 AWS-ELB 网络负载均衡器,每个 HTTP 有两个 TCP 侦听器(S) 端口暴露(nexus-group 和 nexus-hosted)重定向到两个 TCP 目标组,在托管您的 Nexus 服务器的 EC2 实例 ID 上具有实例目标类型,这将重定向来自您的 [=36= 的网络流量] DNS 到您的 ELB,然后到您的 Nexus EC2 实例。

请注意,我们没有使用 AWS-ELB Application Load Balancer,因为它仅适用于 HTTP 侦听器,并且 Docker 不支持在您使用上下文时指定存储库路径启动 docker CLI,默认情况下它是 HTTP(S) 并且所有这些都使用 URL 路径模式 /v2/* 进行中间调用。

正确设置和配置后,您将能够 docker 登录、拉取和推送图像到您的内部 nexus 存储库,就像这个示例 powershell 会话一样:

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

PS D:\> docker login <host_redirect_to_NLB>:<port_nexus_docker_group>
Username: tarik
Password:
Login Succeeded
PS D:\> docker login <host_redirect_to_NLB>:<port_nexus_docker_host>
Username: tarik
Password:
Login Succeeded
PS D:\> docker pull <host_redirect_to_NLB>:<port_nexus_docker_group>/amazonlinux
Using default tag: latest
latest: Pulling from amazonlinux
72d97abdfae3: Pull complete
Digest: sha256:04f5ea9fec3f1f514451ea7c1a1a77a7c023787cb6cc066cc6d0413b56cd0eac
Status: Downloaded newer image for <host_redirect_to_NLB>:<port_nexus_docker_group>/amazonlinux:latest
PS D:\> docker tag <host_redirect_to_NLB>:<port_nexus_docker_group>/amazonlinux <host_redirect_to_NLB>:<port_nexus_docker_host>/tarik-awslinux:1.0
PS D:\> docker push <host_redirect_to_NLB>:<port_nexus_docker_host>/tarik-awslinux:1.0
The push refers to repository [<host_redirect_to_NLB>:<port_nexus_docker_host>/tarik-awslinux]
f387c8b346c8: Pushed
1.0: digest: sha256:04f5ea9fec3f1f514451ea7c1a1a77a7c023787cb6cc066cc6d0413b56cd0eac size: 529
PS D:\> more C:\Users\Tarik\.docker\config.json
{
        "auths": {
                "<host_redirect_to_NLB>:<port_nexus_docker_host>": {},
                "<host_redirect_to_NLB>:<port_nexus_docker_group>": {}
        },
        "HttpHeaders": {
                "User-Agent": "Docker-Client/18.09.2 (windows)"
        },
        "credsStore": "wincred",
        "stackOrchestrator": "swarm"
}

PS D:\> more C:\Users\Tarik\.docker\daemon.json
{
  "registry-mirrors": [
    "https://<host_redirect_to_NLB>:<port_nexus_docker_group>"
  ],
  "insecure-registries": [
    "<host_redirect_to_NLB>:<port_nexus_docker_host>",
    "<host_redirect_to_NLB>:<port_nexus_docker_group>"
  ],
  "disable-legacy-registry": true,
  "debug": true,
  "experimental": false
}