batsh 发表于 2015-11-11 18:38:33

docker 私有仓库push问题

我搭建了一个docker私有仓库,
1、系统是centos6
2、通过nginx 代理,并增加了用户名和密码认证,还有ssl加密传输
3、docker仓库registry是安装在192.168.0.40上,并且nginx也是安装在这台主机上
nginx配置如下:
server {
      listen       443;
      server_nameregistry.info.cn;
      ssl          on;
      ssl_certificate      info.cn.crt;
      ssl_certificate_keyinfo.cn.key;
      access_loglogs/host.access.logmain;
      location / {
            auth_basic   "Security Zones";
            auth_basic_user_file /usr/local/nginx/password;
            proxy_pass http://192.168.0.40:5000;
      }

      error_page   500 502 503 504/50x.html;
      location = /50x.html {
            root   html;
      }

    }


其中ca证书是花钱购买的,能正常使用。
在docker客户端通过
curl -X GET https://test:test@registry.info.cn/v1/search   能正确返回
docker login https://registry.info.cn   可以正常登录,能返回success

但是我push一个images到registry的时候就报错
# docker push registry.info.cn/centos7
The push refers to a repository (len: 1)
Sending image list
Pushing repository registry.info.cn/centos7 (1 tags)
47d44cb6f252: Pushing
Failed to upload metadata: Put https://192.168.0.40:5000/v1/images/47d44cb6f252ea4f6aecf8a447972de5d9f9f2e2bec549a2f1d8f92557f4d05a/json: EOF


我这里好奇的是,push的时候怎么又会解析出IP来访问了,https://192.168.0.40:5000这个肯定是会出错的,不知道原因?????




batsh 发表于 2015-11-11 19:06:12

我又做了个测试,在nginx里把 proxy_pass http://192.168.0.40:5000;改成proxy_pass http://127.0.0.1:5000就报如下错,难道跟这个配置有关吗?
# docker push registry.info.cn/centos7
The push refers to a repository (len: 1)
Sending image list
Pushing repository registry.info.cn/centos7 (1 tags)
47d44cb6f252: Pushing
Failed to upload metadata: Put https://127.0.0.1:5000/v1/images/47d44cb6f252ea4f6aecf8a447972de5d9f9f2e2bec549a2f1d8f92557f4d05a/json: dial tcp 127.0.0.1:5000: connection refused

dl528888 发表于 2015-11-13 12:51:10

我没有配置这样的,感觉你应该是nginx配置文件或者防火墙问题,你可以参考一下https://www.digitalocean.com/community/tutorials/how-to-set-up-a-private-docker-registry-on-ubuntu-14-04。

batsh 发表于 2015-11-13 14:42:20

dl528888 发表于 2015-11-13 12:51
我没有配置这样的,感觉你应该是nginx配置文件或者防火墙问题,你可以参考一下https://www.digitalocean.co ...

问题已解决,确实nginx的配置问题,默认反向代理服务器会向后端真实服务器发送请求,并且请求头中的host字段应为proxy_pass指令设置的服务器。所以只要在nginx的location里增加如下配置即可,作用是不修改web请求header中的host字段。

proxy_set_header Host       $http_host;

页: [1]
查看完整版本: docker 私有仓库push问题