2015-07-23 19 views
10

tôi đã thiết lập một registry tin Docker (v2) trên một hộp CentOS 7 sau tài liệu chính thức của họ: https://docs.docker.com/registry/deploying/HTTP response bị thay đổi với registry Docker tin (v2) đằng sau một nginx Proxy

Tôi đang chạy Docker 1.6.0 trên một hộp Fedora 21.

Sổ đăng ký đang chạy trên cổng 5000 và đang sử dụng khóa SSL có chữ ký của CA đáng tin cậy. Tôi đặt bản ghi DNS cho 'docker-registry.example.com' làm IP nội bộ của máy chủ. Chạy 'docker pull docker-registry.example.com respect000/tag/image', nó hoạt động như mong đợi.

Tôi thiết lập máy chủ nginx, chạy phiên bản nginx: nginx/1.8.0 và thiết lập bản ghi dns cho 'nginx-proxy.example.com' trỏ đến máy chủ nginx và thiết lập trang web. Dưới đây là cấu hình:

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; 
    } 
} 

Khi tôi cố gắng chạy 'Docker kéo nginx-proxy.example.com/tag/image' Tôi nhận được lỗi sau:

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" 

Câu hỏi của tôi là gấp đôi.

  1. Tại sao trình docker tìm kiếm/v1_/ping?
  2. Tại sao tôi lại thấy các 'phản ứng http bị thay đổi'

Nếu tôi chạy 'curl -v nginx-proxy.example.com/v2' Tôi thấy:

[[email protected] 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 

Nếu tôi làm ' curl -v docker-registry.example.com 'Tôi nhận được phản hồi 200 OK. Vì vậy, nginx phải chịu trách nhiệm về điều này. Có ai có một ý tưởng tại sao điều này đang xảy ra? Nó làm tôi phát điên!

Trả lời

13
proxy_pass http://docker-registry.example.com:5000; 

bạn đang đi qua các yêu cầu với HTTP đồng bằng (tức là không có https)

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

Và bạn đang nhận được một phản ứng SSL trở lại. Vì vậy, có vẻ như bạn phải sử dụng https: // và không http: // để truy cập vào cổng 5000. Và thậm chí bạn biết rằng bạn đang sử dụng SSL:

The registry is running on port 5000, and is using an SSL key signed by a trusted CA...

Ngoài ra: xin vui lòng sử dụng các tên dành cho ví dụ như example.com và không sử dụng tên miền trong ví dụ của bạn mà không thuộc về bạn.

+0

Cảm ơn! Điều đó đã làm điều đó. Tôi biết nó sẽ là một cái gì đó hiển nhiên ...... Ngoài ra, tôi đã thay đổi các trường hợp 'domain.com' thành 'example.com' –

Các vấn đề liên quan