You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx反向代理下Docker私有仓库出现unknown blob错误求助

Nginx反向代理下Docker私有仓库出现unknown blob错误求助

嘿,我来帮你排查这个问题!你遇到的unknown blob错误在Docker Registry搭配Nginx反向代理时挺常见的,咱们一步步来捋可能的原因和解决办法:

1. 补全Nginx反向代理的核心转发规则

你贴出的Nginx配置里,HTTPS的server块只配置了证书信息,但没有把请求转发到Docker Registry的5000端口——这会导致用户请求根本没到达Registry服务,自然会返回错误。

请把HTTPS的server块补全成下面这样:

server {
    listen 443 ssl;
    server_name domain.of.the.registry;

    ssl_certificate /etc/letsencrypt/live/domain.of.the.registry/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/domain.of.the.registry/privkey.pem; # 一定要补全私钥文件路径

    # 新增反向代理核心配置
    location / {
        proxy_pass http://localhost:5000;
        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_set_header X-Forwarded-Proto $scheme;
    }
}

注意:ssl_certificate_key的路径要准确指向你的SSL私钥文件,这部分你之前的配置没写完,必须补全。

2. 确保Registry的Secret与请求头正确匹配

你启动Registry时设置了REGISTRY_HTTP_SECRET=banana,这个密钥用于Registry内部的请求签名校验。上面的Nginx配置里已经添加了proxy_set_header Host $host;,这很关键——如果Host头传递不正确,Registry可能会拒绝请求,进而引发unknown blob这类模糊错误。

3. 验证自签证书的配置正确性

你提到已经把证书放到了/etc/docker/certs.d/domain.of.the.registry/目录下,再检查这几点:

  • 证书文件名要符合规范:如果是自签根证书,命名为ca.crt;如果是域名证书,命名为domain.of.the.registry.crt
  • 确保Docker能读取该证书:执行chmod 644 /etc/docker/certs.d/domain.of.the.registry/你的证书文件名.crt
  • 重启Docker服务让证书生效:systemctl restart docker

4. 针对性排查日志细节

之前你说看日志没头绪,可以聚焦这两个日志源:

  • 查看Registry的实时运行日志:docker logs -f docker_registry,然后尝试推送/拉取镜像,看有没有具体的错误提示(比如权限不足、请求被拒绝的原因)
  • 查看Nginx的错误日志:tail -f /var/log/nginx/error.log,排查是否有转发失败、证书无效等记录

5. 分步测试连通性

先验证Registry本身是否正常:在虚拟机本地执行curl http://localhost:5000/v2/_catalog,如果返回{"repositories":[]},说明Registry服务本身没问题。
再验证Nginx转发是否正常:执行curl https://domain.of.the.registry/v2/_catalog,如果同样返回正确的JSON,说明Nginx的转发链路是通的。

6. 排查镜像推送环节的问题

如果前面的测试都正常,推送镜像仍报错,试试这些操作:

  • 用官方镜像测试:拉取一个官方镜像(比如nginx:alpine),重新打标签后推送:
    docker tag nginx:alpine domain.of.the.registry/test-nginx
    docker push domain.of.the.registry/test-nginx
    
    如果这个操作也报错,说明问题不在你自己的镜像上;如果成功,那可能是你原镜像本身损坏。
  • 检查Docker daemon配置:查看/etc/docker/daemon.json,如果之前配置过insecure-registries,可能和证书配置冲突,建议暂时注释掉该配置,重启Docker后再测试。

修改完配置后,记得重启Nginx(systemctl restart nginx)和Registry服务,再重新测试哦!

备注:内容来源于stack exchange,提问作者Alvaro Maceda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 09:18:12