0

I'm trying to push images remotely to my private docker registry, which fails like this:

$ 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

And have errors in logs like this:

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"

I can successfully login to sub.example.com:5000

$ podman login sub.example.com:5000
Username: testuser
Password: 
Login Succeeded!

and can query catalog via curl

$ curl -u testuser https://sub.example.com:5000/v2/_catalog

I access registry using basic authentication with ssl via nginx proxy. The following is basically what docker registry docs tell me to do + default server config, nginx config:

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;
        }
}

SSL certificate has all names, including example.com and sub.example.com

And the container for registry is created like this:

#!/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

then run simply:

$ podman run myregistry

I know it's a wall of text, but please help :), i can push images locally on the server without proxy, but i want to be able to push to my registry remotely with ssl and basic auth.

0 Answers0