Push Content to a Repository

Users can push images (manifests and manifest lists) to repositories hosted by the Container Registry. It is possible to push images that container foreign (non-distributable) layers. Only the users who are logged in to the registry are allowed to perform push operation. Find below a complete example of pushing a tagged image.

Note

Having disabled the token authentication, only users with staff privileges (i.e., administrators) are allowed to push content to the registry.

The registry supports cross repository blob mounting. When uploading blobs that already exist in the registry as a part of a different repository, the content is not being uploaded but rather referenced from another repository to reduce network traffic.

$ podman tag d21d863f69b5 localhost:24817/test/this:mytag1.8
$ podman login -u user -p password localhost:24817
  Login Succeeded!
$ podman push d21d863f69b5 localhost:24817/test/this:mytag1.8
  Getting image source signatures
  Copying blob 210dda196ec1 done
  Copying config d21d863f69 done
  Writing manifest to image destination
  Storing signatures

$ http GET $BASE_ADDR/v2/test/this/tags/list
  HTTP/1.1 200 OK
  Allow: GET, HEAD, OPTIONS
  Connection: close
  Content-Length: 40
  Content-Type: application/json
  Date: Wed, 03 Jun 2020 18:25:46 GMT
  Docker-Distribution-API-Version: registry/2.0
  Server: gunicorn/20.0.4
  Vary: Accept
  X-Frame-Options: SAMEORIGIN

  {
    "name": "test/this",
    "tags": [
        "mytag1.8"
    ]
  }

Note

Content is pushed to a push repository type. A push repository does not support mirroring of the remote content via the Pulp API.

Note

Rollback to the previous repository versions is not possible with a push repository. Its latest version will always be served.

Warning

Image that has been pulled from a registry and then subsequently pushed to another registy can lead to the blobs digest change. Most image layers on registries are compressed. Pull operation decompresses them to get an uncompressed stream, and extracts it to create the local filesystem. Push creates an uncompressed tarball from the local filesystem and recompresses it during upload. The recompression is not at all guaranteed to be reproducible, it is client implementation dependent — push with different compression implementation than the original author used is more likely to result in a different blob digest.