dockerはエージェントを通じてhttpsプロトコルの私服アドレスをアップロードしてunknown blobを間違えました

4883 ワード

dockerはエージェントを通じてhttpsプロトコルの私服アドレスをアップロードしてunknown blobを間違えました
一、環境説明
1.Docker
[root@server58 ~]# docker version
Client:
 Version:       18.04.0-ce
 API version:   1.37
 Go version:    go1.9.4
 Git commit:    3d479c0
 Built: Tue Apr 10 18:21:36 2018
 OS/Arch:       linux/amd64
 Experimental:  false
 Orchestrator:  swarm

Server:
 Engine:
  Version:      18.04.0-ce
  API version:  1.37 (minimum version 1.12)
  Go version:   go1.9.4
  Git commit:   3d479c0
  Built:        Tue Apr 10 18:25:25 2018
  OS/Arch:      linux/amd64
  Experimental: false

2.Harbor
  • バージョン:4.0
  • ポート:8088
  • 3.nginx
  • ドメイン名:hub.kingboyworld.com
  • nginxをエージェントとして、ssl証明書を構成し、https://hub.kingboyworld.com代理先http://localhost:8088.
  • 同時構成http://hub.kingboyworld.comリダイレクト先https://hub.kingboyworld.com

  • nginxプロファイル
    server {
        listen 80;
        server_name hub.kingboyworld.com;
        return  301 https://$server_name$request_uri; 
    }
    
    server {
            listen       443;
            server_name  hub.kingboyworld.com;
            ssl on;
            ssl_certificate ssl/kingboyworld.com_bundle.crt; 
            ssl_certificate_key ssl/kingboyworld.com.key;
            ssl_session_timeout 5m;
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
            ssl_ciphers AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL;
            ssl_prefer_server_ciphers on;
            access_log  logs/hub.kingboyworld.com.access.log;
            error_log   logs/hub.kingboyworld.com.error.log;
            location / {
                        proxy_pass http://localhost:8088;
                        proxy_set_header HOST $HOST;# tomcat       
                        proxy_set_header        X-Real-IP $remote_addr;
                        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_set_header        X-Forwarded-Proto "https";
                        client_max_body_size 1G;
                        proxy_connect_timeout 3000;
                        proxy_send_timeout 3000;
                        proxy_read_timeout 3000;
                        proxy_buffering    off;
                        tcp_nodelay        on;
                chunked_transfer_encoding on; 
            }
    
    }

    二、エラーメッセージ
    The push refers to repository [hub.kingboyworld.com/town-test/config]
    b148c16cffe6: Pushing [==================================================>]   25.2MB/25.2MB
    148268bf14be: Layer already exists 
    6a47dae912f7: Layer already exists 
    00439e7d6354: Layer already exists 
    a1a8b7f7efac: Layer already exists 
    341d865c1c22: Layer already exists 
    61c06e07759a: Layer already exists 
    bcbe43405751: Layer already exists 
    e1df5dc88d2c: Layer already exists 
    unknown blob

    三、原因の検索
    nginxのプロファイルに1行追加し、
    proxy_set_header HOST $HOST;# tomcat       

    この行を注釈すればいい.
    四、原因分析(必ずしも正しいとは限らない)
    HOSTは現在アクセスしているhostをharborに持ち込んでnginxミラーを起動し、この問題を引き起こします.