Repo 3 does not appear to support "Cross Repository Blob Mount" functionality as documented in the Docker v2 spec (https://docs.docker.com/registry/spec/api/).
The spec states:
A blob may be mounted from another repository that the client has read access to, removing the need to upload a blob already known to the registry. To issue a blob mount instead of an upload, a POST request should be issued in the following format:
If the blob is successfully mounted, the client will receive a 201 Created response:
The Location header will contain the registry URL to access the accepted layer file. The Docker-Content-Digest header returns the canonical digest of the uploaded blob which may differ from the provided digest. Most clients may ignore the value but if it is used, the client should verify the value against the uploaded blob data.
If a mount fails due to invalid repository or digest arguments, the registry will fall back to the standard upload behavior and return a 202 Accepted with the upload URL in the Location header:
This behavior is consistent with older versions of the registry, which do not recognize the repository mount query parameters.
In testing, it is observed that Repo 3 returns a 202 for such a request indicating it does indeed not recognise/support the mount param:
Test against Repo 3:
- Create a Docker hosted repo.
- Docker client, side run:
- For the last push, observe in the Repo 3 request.log that a 202 is returned for:
And the push fails with:
Repeat same test against the official Docker registry:
Observe the last push succeeds.
Repo 3 supports mount params and its behaviour is inline with docker spec/official docker registry.