build-push-action icon indicating copy to clipboard operation
build-push-action copied to clipboard

After successfully logging into my registry, the image push fails as it's trying against the local IP

Open TomHart opened this issue 11 months ago • 1 comments
trafficstars

Contributing guidelines

I've found a bug, and:

  • [ ] The documentation does not mention anything about my problem
  • [ ] There are no open or closed issues that are related to my problem

Description

I have a registry running locally, externally accessibly via registry.example.com. The Github action can log into my registry fine, but the docker push fails. Has anyone had this before?

Expected behaviour

Docker image pushes to my registry

Actual behaviour

It resolves the internal IP address and tries to push there

#38 [auth] sharing credentials for registry.example.com
#38 DONE 0.0s
#37 exporting to image
#37 33.19 error: failed to copy: failed to do request: Put "https://192.168.1.171/v2/repo-name/blobs/uploads/941b40a9-d6fb-4701-aded-385eec9dcb55?_state=_syVg7StDX9rNYAzmMqpuTIdHItl9e_dkJQ29zDiiO17Ik5hbWUiOiJob3BraW5zb24tY21zIiwiVVVJRCI6Ijk0MWI0MGE5LWQ2ZmItNDcwMS1hZGVkLTM4NWVlYzlkY2I1NSIsIk9mZnNldCI6MCwiU3RhcnRlZEF0IjoiMjAyNC0xMS0zMFQxMDowNjoxNi43MjM4NDAxMDJaIn0%3D&digest=sha256%3A17f01ce0086807fa706f33dba43b139ee9b1f8b38eed3825f6eea4005d7a4d3d": dial tcp 192.168.1.171:443: i/o timeout

Repository URL

No response

Workflow run URL

No response

YAML workflow

-   name: Login to My Registry
                uses: docker/login-action@v3
                with:
                    registry: ${{ vars.DOCKER_REGISTRY }}
                    username: ${{ vars.DOCKER_USERNAME }}
                    password: ${{ secrets.DOCKER_PASSWORD }}

            -   name: Login to My Pull Registry
                uses: docker/login-action@v3
                with:
                    registry: ${{ vars.DOCKER_PULL_REGISTRY }}
                    username: ${{ vars.DOCKER_USERNAME }}
                    password: ${{ secrets.DOCKER_PASSWOR

            -   name: Build Docker image
                uses: docker/build-push-action@v6
                with:
                    provenance: false # Fails with or without this, just here from testing
                    push: true
                    tags: |
                        registry.example.com/${{ github.event.repository.name }}:${{ github.sha }}
                        registry.example.com/${{ github.event.repository.name }}:latest
                    cache-from: type=gha
                    cache-to: type=gha,mode=max
                env:
                    BUILDKIT_PROGRESS: plain
                    DOCKER_BUILDKIT_DEBUG: "true"

Workflow logs

No response

BuildKit logs


Additional info

No response

TomHart avatar Nov 30 '24 10:11 TomHart

My nginx config to expose the registry

server {
    server_name registry.example.com;
    location / {
        if ($request_method = OPTIONS) {
            add_header Access-Control-Allow-Origin 'https://registry-ui.example.com';
            add_header Access-Control-Allow-Methods 'GET, OPTIONS, PUT, POST, DELETE';
            add_header Access-Control-Allow-Credentials 'true';
            add_header Access-Control-Allow-Headers 'Accept, *';
            add_header Content-Type text/plain;
            add_header Content-Length 0;
            return 204;
        }
    
        proxy_pass http://192.168.1.171;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
    
        add_header Access-Control-Allow-Origin 'https://registry-ui.example.com';
        add_header Access-Control-Allow-Methods 'GET, OPTIONS, PUT, POST, DELETE';
        add_header Access-Control-Allow-Credentials 'true';
        add_header Access-Control-Allow-Headers 'Accept, *';
    
        client_max_body_size 2G;
    }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/registry.example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/registry.example.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

TomHart avatar Nov 30 '24 10:11 TomHart

I'm having the same issue. Been running that local registry for years and this issue only appeared this week.

Maybe worth noting that I upgraded to Docker version 28.5.1 last week. I had been pinned to 28.1.1 for quite a while before this because of some Swarm issue. I also run an old v2 registry version still, I think 2.7.x . I'll try upgrading to 2.8 or 3.0 as soon as I get a chance.

snth avatar Oct 21 '25 06:10 snth