-
Notifications
You must be signed in to change notification settings - Fork 228
Description
There is an assumption to today that a server implementation of the distribution specification will either not care about the name used by the client or that all requests will have a known common namespace. An example of this is the Docker Hub assuming that all requests are prefixed with docker.io
even though the registry hostname is registry-1.docker.io
. However this has always caused difficulty when a client then wants to mirror content, localhost:5000/library/ubuntu
could proxy to registry-1.docker.io/library/ubuntu
, however localhost:5000
could never proxy to anything else. Complicated registry configurations have been proposed to remedy this as well as a backwards incompatible approach of requesting as localhost:5000/docker.io/library/ubuntu
. However a goal of this specification should be simplicity and backwards compatibility. I believe that a solution does belong in the specification to unlock the mirroring use cases without complicated configuration or DNS setup.
My proposal is to add a way to pass up the name resolved by the client to the registry, (e.g. docker.io/library/ubuntu
). So if a request is going to localhost:5000/library/ubuntu
, it could mirror both docker.io/library/ubuntu
and quay.io/library/ubuntu
and switch based on request parameters. There are 2 possible ways to achieve this, one is by creating adding an HTTP request header (e.g. OCI-REF-NAME: docker.io/library/ubuntu
) or by adding a query parameter ?oci-ref-name=docker.io/library/ubuntu
). The first is clean but the second may be more useful for static mirroring. I am not suggesting one over the other yet, just stating the problem and solutions to discuss.