当前位置: 首页 > 知识库问答 >
问题:

nginx代理后docker private registry(v2)的HTTP响应格式错误

邵耀
2023-03-14

我在CentOS 7框上设置了Docker私有注册表(v2),下面是他们的官方留档:https://docs.docker.com/registry/deploying/

我在Fedora 21盒子上运行docker 1.6.0。

注册表正在端口5000上运行,并且正在使用一个由可信CA签名的SSL密钥。我为“docker注册表”设置了一个DNS记录。实例com'是服务器的内部IP。运行“docker pull docker注册表”。实例com:5000/tag/image',按预期工作。

我设置了一个nginx服务器,运行nginx版本:nginx/1.8.0,并为“nginx proxy”设置了一个dns记录。实例com'指向nginx服务器,并设置一个站点。以下是配置:

server {
   listen 443 ssl;
   server_name nginx-proxy.example.com;

   add_header Docker-Distribution-Api-Version: registry/2.0 always;

   ssl on;
   ssl_certificate /etc/ssl/certs/cert.crt;
   ssl_certificate_key /etc/ssl/certs/key.key;

   proxy_set_header Host $host;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-Proto $scheme;
   proxy_set_header X-Original-URI $request_uri;
   proxy_set_header Docker-Distribution-Api-Version registry/2.0;

   location / {
     proxy_pass http://docker-registry.example.com:5000;
   }
}

当我尝试运行docker pull nginx代理时。实例com/tag/image“我发现以下错误:

FATA[0001] Error response from daemon: v1 ping attempt failed with error: Get https://nginx-proxy.example.com/v1/_ping: malformed HTTP response "\x15\x03\x01\x00\x02\x02"

我的问题有两个。

  1. 为什么docker客户机在寻找/v1_uu/ping

如果我运行'curl-v nginx proxy。实例com/v2’我明白了:

[root@alex amerenda] $ curl -v https://nginx-proxy.example.com/v2/
* Hostname was NOT found in DNS cache
*   Trying 10.1.43.165...
* Connected to nginx-proxy.example.com (10.1.43.165) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* SSL connection using TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
* Server certificate:
*   subject: CN=*.example.com,O="example, Inc.",L=New York,ST=New York,C=US
*   start date: Sep 15 00:00:00 2014 GMT
*   expire date: Sep 15 23:59:59 2015 GMT
*   common name: *.example.com
*   issuer: CN=GeoTrust SSL CA - G2,O=GeoTrust Inc.,C=US
> GET /v2/ HTTP/1.1
> User-Agent: curl/7.37.0
> Host: nginx-proxy.example.com
> Accept: */*
> \x15\x03\x01\x00\x02\x02

如果我做curl-vdocker-registry.example.com我得到200 OK的响应。所以nginx必须对此负责。有人知道为什么会发生这种情况吗?它快把我逼疯了!

共有1个答案

田瀚
2023-03-14
 proxy_pass http://docker-registry.example.com:5000;

您正在使用普通HTTP(即没有https)传递请求

\x15\x03\x01\x00\x02\x02

您将得到一个SSL响应。因此,似乎必须使用https://而不是http://才能访问端口5000。您甚至知道您正在使用SSL:

注册表在端口5000上运行,并且使用由受信任的CA签名的SSL密钥...

除此之外:请使用为example.com等示例保留的名称,不要在示例中使用不属于您的域名。

 类似资料:
  • 问题内容: 我已经按照其官方文档在CentOS 7盒子上设置了Docker私有注册表(v2):https : //docs.docker.com/registry/deploying/ 我在Fedora 21机器上运行docker 1.6.0。 注册表在端口5000上运行,并使用由受信任的CA签名的SSL密钥。我将docker- registry.example.com的DNS记录设置为服务器的内

  • 我用无服务器创建了一个lambda函数。我用lambda控制台测试了lambda函数,它工作得很好。但是,在转换之前,我得到了endpoint响应体:null和执行失败,原因是配置错误:当我试图为该函数调用APIendpoint时,错误的Lambda代理响应。 并且调用了查询字符串参数的endpoint:。 我不知道为什么我的函数已经以这里的格式返回了响应,但仍然得到了格式错误的Lambda代理响

  • 问题内容: 我正在尝试使用AWS Lambda建立一个hello world示例,并通过api网关为其提供服务。我单击了“创建Lambda函数”,这将设置api通道并选择了Blank Function选项。我添加了在AWS网关入门指南中找到的lambda函数: 问题是,当我向它发出GET请求时,它返回了502响应。并且日志显示“由于配置错误,执行失败:Lambda代理响应格式错误”。 问题答案:

  • 我试图用AWS lambda建立一个hello world示例,并通过api网关为其服务。我点击了“创建一个Lambda函数”,它设置了api网关,并选择了空白函数选项。我添加了在AWS网关入门指南上找到的lambda函数: 问题是,当我向它发出GET请求时,它返回502响应。日志上写着“由于配置错误执行失败:Lambda代理响应不正确”。

  • 我正在尝试使用AWS lambda设置一个hello world示例并通过api网关提供它。我单击了“创建Lambda函数”,它设置了api网关并选择了空白函数选项。我添加了在AWS网关上找到的lambda函数入门指南: 问题是,当我向它发出GET请求时,它会返回502响应{“message”:“Internal server error”}。日志显示“由于配置错误,执行失败:Lambda代理响应

  • 我试图在aws.lamda-service上的node.js中创建函数,并在函数控制台进行测试,效果良好,但当调用api时,它不能导出到外部,api网关错误“malformed Lambda proxy response”状态错误502 有什么想法吗