uber / kraken

P2P Docker registry capable of distributing TBs of data in seconds

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Fails for some repositories with quay.io as a registry backend

wk8 opened this issue · comments

Describe the bug

Configuring quay.io as a registry backend doesn't work for certain repositories, as queries to get manifests for specific tags fail.

To Reproduce
On any k8s cluster, apply the following manifest, which is basically the dev helm manifest but with quay.io configured as a catch-all namespace: quay_repro.txt.

Then exec into an agent pod, and try to

curl -v localhost:8081/v2/prometheus/haproxy-exporter/manifests/v0.10.0

That will fail, and the build-index's pod will have a log line similar to:

2020-10-26T02:54:41.930Z	INFO	handler/handler.go:98	500 GET /tags/prometheus/haproxy-exporter:v0.10.0 storage: backend client: parse manifest v2: unmarshal manifest: mediaType in manifest should be 'application/vnd.docker.distribution.manifest.v2+json' not ''

and trying to pull that image (for example from the host node, or from a DinD container on the same node) will fail:

/ # docker pull localhost:8081/prometheus/haproxy-exporter:v0.10.0
Error response from daemon: received unexpected HTTP status: 500 Internal Server Error

Note that pulling directly from quay.io works just fine:

docker pull quay.io/prometheus/haproxy-exporter:v0.10.0

In contrast, getting manifests for latest instead of a specific tag works just fine:

curl -v localhost:8081/v2/prometheus/haproxy-exporter/manifests/latest

and so pulling host.docker.internal:8081/prometheus/haproxy-exporter:latest works too.

Expected behavior

With the configuration above, I'd expect that as long as docker pull quay.io/XYZ works, then we should be able to docker pull localhost:8081/XYZ just the same.

Environments
k8s

Additional context
Seems to affect all versions, including master.