docker通过代理上传https协议的私服地址报错unknown blob

本文记录了使用Docker通过代理推送镜像到Harbor私服时遇到的unknown blob错误,并详细分析了解决该问题的过程。通过调整nginx代理配置中的HOST头部设置解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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的配置文件中多加了一行,

proxy_set_header HOST $HOST;#向tomcat转发信息头数据

把这一行注释掉即可。

四、原因分析(不一定对)

HOST会把当前访问的host带到harbor启动nginx镜像,导致了这个问题。

### Docker push unknown blob 错误解决方案 在使用 `docker push` 命令时,如果出现 `unknown blob` 错误,通常表示 Docker 客户端与远程仓库之间的通信存在问题。以下是一些可能的原因及对应的解决方案: #### 1. **镜像层缺失** 如果某些镜像层在本地丢失或损坏,可能导致 `unknown blob` 错误。可以通过重新拉取基础镜像来修复问题。 ```bash docker pull <base_image> ``` 然后重新构建并推送镜像[^1]。 #### 2. **网络连接问题** 不稳定的网络连接可能导致部分镜像层未能成功上传到远程仓库。可以尝试以下方法: - 检查网络连接是否稳定。 - 使用 `--retry` 参数增加重试次数(适用于 Docker 18.09 及以上版本)。 ```bash docker push --retry 5 <image_name> ``` #### 3. **远程仓库配置问题** 如果目标仓库是私有仓库,需要确保其配置正确。例如,在 `/etc/docker/daemon.json` 中添加私有仓库地址,并重启 Docker 服务[^2]。 ```json { "insecure-registries": ["<your_private_registry>:<port>"] } ``` 确保私有仓库容器正常运行: ```bash docker ps | grep registry ``` #### 4. **Docker 客户端版本不兼容** 如果 Docker 客户端版本与远程仓库版本不兼容,也可能导致 `unknown blob` 错误。建议升级 Docker 客户端至最新版本: ```bash sudo apt-get update && sudo apt-get install docker-ce ``` #### 5. **缓存问题** 有时,Docker 缓存可能导致问题。可以尝试清除缓存并重新推送: ```bash docker system prune -a docker push <image_name> ``` #### 6. **手动检查镜像层** 使用以下命令检查镜像的分层结构,确认是否存在缺失或损坏的层: ```bash docker inspect <image_name> ``` 如果发现某些层缺失,可以尝试重新构建镜像: ```bash docker build -t <image_name> . ``` #### 7. **目标仓库容量不足** 如果目标仓库的存储空间不足,也会导致 `unknown blob` 错误。联系仓库管理员确认是否有足够的存储空间。 --- ```python # 示例代码:检查镜像分层结构 import subprocess def check_image_layers(image_name): result = subprocess.run(['docker', 'inspect', image_name], stdout=subprocess.PIPE) layers = result.stdout.decode('utf-8') return layers image_name = "a390133368/robot-pub:ubuntu-latest" layers = check_image_layers(image_name) print(layers) ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值