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

带Nginx反向代理、基础认证与SSL的Docker Registry远程推送镜像失败求助

带Nginx反向代理、基础认证与SSL的Docker Registry远程推送镜像失败求助

各位大佬好,我最近碰到个棘手的问题——远程往配置了Nginx反向代理、基础认证和SSL的私有Docker Registry推送镜像一直失败,本地在服务器上绕过代理直接推送是正常的,但远程通过代理推就报错,实在找不到问题出在哪了,麻烦帮忙排查一下!

执行推送命令及错误信息

我用的推送命令是:

podman push sub.example.com:5000/dummyimg sub.example.com:5000/rem/dummyimg

执行后输出的错误内容:

Getting image source signatures

Copying blob 0fbe8c68abd3 done

Copying blob 30085473d084 done

Copying blob 664eb87278f9 done

Copying blob c8db7b4be633 done

Copying blob f1417ff83b31 [=====================>----------------] 4.0MiB / 7.0MiB

Copying blob d007f013021f [===========================>----------] 4.0MiB / 5.4MiB

Error: writing blob: Patch "index404.html": stopped after 10 redirects

Registry日志中的错误

同时Registry日志里出现了这样的错误:

time="2023...Z" level=error msg="response completed with error" err.code="blob unknown"
err.detail=sha256:0fbe...04 err.message="blob unknown to registry" go.version=go1.16.15
http.request.host=sub.example.com http.request.id=440cfc9f-272d-493a-be95-c6f29bfae3dd
http.request.method=HEAD http.request.remoteaddr=1.2.3.4
http.request.uri="/v2/rem/dummyimg/blobs/sha256:0fbe...04"
http.request.useragent="containers/5.16.0 (github.com/containers/image)"
http.response.contenttype="application/json; charset=utf-8"
http.response.duration=4.959982ms http.response.status=404 http.response.written=157
vars.digest="sha256:0fbe...04" vars.name="rem/dummyimg"

已确认正常的操作

我已经验证过几个基础操作是没问题的:

  • 能成功登录到Registry:
podman login sub.example.com:5000
Username: testuser
Password:
Login Succeeded!
  • 用curl可以正常查询catalog:
curl -u testuser https://sub.example.com:5000/v2/_catalog

环境配置详情

我是通过Nginx代理来提供Registry的SSL和基础认证访问,SSL证书已经包含了example.com和sub.example.com所有域名。

Nginx配置

server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
return 301 https://$host$request_uri;
}

server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name _;
root /var/www/html;
ssl_certificate "/etc/letsencrypt/live/example.com/fullchain.pem";
ssl_certificate_key "/etc/letsencrypt/live/example.com/privkey.pem";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
index index404.html;
error_page 404 index404.html;
location / {
try_files $uri $uri/ =404;
}
}

server {
listen 443 ssl http2;
server_name example.com www.example.com;
ssl_certificate "/etc/letsencrypt/live/example.com/fullchain.pem";
ssl_certificate_key "/etc/letsencrypt/live/example.com/privkey.pem";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://localhost:8080;
}
}

# for podman registry
map $upstream_http_docker_distribution_api_version $docker_distribution_api_version {
'' 'registry/2.0';
}

server {
listen 5000 ssl http2;
server_name sub.example.com;
ssl_certificate "/etc/letsencrypt/live/example.com/fullchain.pem";
ssl_certificate_key "/etc/letsencrypt/live/example.com/privkey.pem";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_protocols TLSv1.1 TLSv1.2;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
ssl_prefer_server_ciphers on;
client_max_body_size 16384m;
chunked_transfer_encoding on;
location / {
add_header 'Docker-Distribution-Api-Version' $docker_distribution_api_version always;
auth_basic "Registry realm";
auth_basic_user_file /var/www/_auth/htpass2;
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 "https";
proxy_pass http://127.0.0.1:5001;
}
}

Registry容器创建与启动

我用podman创建Registry容器的脚本:

#!/bin/bash

BASE=/home/some/folder
podman create -p 127.0.0.1:5001:5000 \
-e REGISTRY_HTTP_ADDR=0.0.0.0:5000 \
-v $BASE/registry:/var/lib/registry \
--replace \
--name myregistry \
registry:2

启动命令就是:

podman run myregistry

本地直接推到服务器的5001端口完全正常,但通过Nginx代理的5000端口远程推就会出现上面的错误,实在摸不着头绪了,求各位帮忙看看问题可能出在哪!

备注:内容来源于stack exchange,提问作者Yaroslav Alexeevich

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 14:03:00