[问题已处理]-harbor可以login成功pull成功但是push报错

导语:harbor通过域名push提示没有push权限

访问方式是nginx 80和443 都转发到harbor的80。因为我没有修改dns解析的权限,只能这样搞。

现象是使用域名的话docker login pull都没有问题,但是push会有问题。用ip地址的话 login pull push都没有问题。

nginx配置

# HTTP Server
server {
	listen 80;
        server_name  harbor.deepwise.com;
    location / {
        proxy_pass  http://10.10.3.246;
        proxy_redirect     off;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        proxy_max_temp_file_size 0;
        proxy_connect_timeout      90;
        proxy_send_timeout         90;
        proxy_read_timeout         90;
        proxy_buffer_size          4k;
        proxy_buffers              4 32k;
        proxy_busy_buffers_size    64k;
        proxy_temp_file_write_size 64k;
    }
}
# HTTPS Server
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name harbor.deepwise.com;

    access_log /var/log/nginx/harbor-access.log;
    error_log /var/log/nginx/harbor-error.log;
    keepalive_timeout 60;

    #ssl on; 低版本需要注释掉
    ssl_certificate  /etc/nginx/conf.d/ssl/deepwise.com.pem;
    ssl_certificate_key /etc/nginx/conf.d/ssl/deepwise.com.key;
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_prefer_server_ciphers on;
    server_tokens off;
    client_max_body_size    0;


    location / {
        proxy_pass  http://10.10.3.246;
        proxy_redirect     off;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        proxy_max_temp_file_size 0;
        proxy_connect_timeout      90;
        proxy_send_timeout         90;
        proxy_read_timeout         90;
        proxy_buffer_size          4k;
        proxy_buffers              4 32k;
        proxy_busy_buffers_size    64k;
        proxy_temp_file_write_size 64k;
    }
}

harbor.yaml

hostname: 10.10.3.246
http:
  port: 80
harbor_admin_password: password
database:
  password: Deepwise1718
  max_idle_conns: 50
  max_open_conns: 100
data_volume: /fc_san/harbor-update
clair:
  updaters_interval: 12
trivy:
jobservice:
  max_job_workers: 10
notification:
  webhook_job_max_retry: 10
chart:
  absolute_url: disabled
log:
  level: info
  local:
    rotate_count: 50
    rotate_size: 200M
    location: /var/log/harbor
_version: 2.0.0
proxy:
  http_proxy:
  https_proxy:
  no_proxy: 127.0.0.1,localhost,.local,.internal,log,db,redis,nginx,core,portal,postgresql,jobservice,registry,registryctl,clair
  components:
    - core
    - jobservice
    - clair
    - trivy
auth_mode: ldap_auth

编辑 harbor.yml目前下的common/config/nginx/nginx.conf , 注释掉所有的 proxy_set_header X-Forwarded-Proto $scheme;

测试不能行

修改proxy_set_header X-Forwarded-Proto $scheme; 为proxy_set_header X-Forwarded-Proto https

可以啦!

有资料说是login的时候,会话只进行了一次,并且都走了https协议,所以没有出现问题。这就能解释为什么用ip login pull push都没有问题了(我给ip地址设置了insecure-registries)。

而push操作,分为2步:

  1. 验证: 和login类似,多了步去查你的权限;
  2. push: 这里恰恰出了问题,因为它走了http的协议,相关规则的文件:(https://github.com/docker/dist … ls.go )
    而重新走了http的内容,会被认为是401的,所以会出了上边的报错。

不过这会导致push用ip地址不能用

等有权限了测试一下直接用harbor的80和443试试。

https://dockone.io/article/865

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Docker Harbor是一个开源的企业级容器镜像仓库,它可以帮助用户管理和分发Docker镜像。通过搭建Docker Harbor仓库,用户可以自己创建和维护私有的镜像仓库,并使用https认证方式进行安全访问。 要搭建Docker Harbor仓库,首先需要下载和安装Docker Compose工具。可以使用以下命令下载和安装Docker Compose: ``` curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose ``` 接着,可以使用以下命令检查Docker Compose是否安装成功: ``` docker-compose -v ``` 下载完Docker Compose后,需要维护和管理Harbor仓库。首先,需要下载registry镜像并创建本地私有仓库。可以使用以下命令下载registry镜像: ``` docker pull registry ``` 接着,在daemon.json文件中添加私有镜像仓库地址。可以使用以下命令编辑daemon.json文件: ``` vim /etc/docker/daemon.json ``` 并在文件中添加如下内容: ``` { "registry-mirrors": ["https://3c7tpzyf.mirror.aliyuncs.com"], "insecure-registries": ["192.168.122.10:5000"] } ``` 然后,重启Docker服务以使更改生效: ``` systemctl restart docker.service ``` 最后,使用以下命令运行registry容器来启动私有仓库: ``` docker run -itd -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest ``` 以上就是搭建Docker Harbor仓库的过程。通过这个仓库,您可以方便地管理和分发Docker镜像。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [docker-harbor2.4.2-https私有仓库-有验证和web](https://download.csdn.net/download/qq_34953582/87952076)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Docker私有仓库与Harbor](https://blog.csdn.net/weixin_48861962/article/details/121726836)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爷来辣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值