Container Registry is deprecated. Effective March 18, 2025, Container Registry is shut down and writing images to Container Registry is unavailable. For more information about the Container Registry deprecation and how to migrate to Artifact Registry, see Container Registry deprecation.
Stay organized with collections
Save and categorize content based on your preferences.
Container Registry implements a Docker protocol so that you can push and pull
images directly with Docker clients, including the
Docker command-line tool.
Google Cloud services that typically integrate with
Container Registry, such as Cloud Build and Google Kubernetes Engine, are
configured by with default permissions to access
repositories in the same project and do not require a separate client.
If you want to interact with Container Registry without the Docker client,
we recommend using the gcrane tool. The tool provides:
Simple commands that work with Container Registry, Artifact Registry, and other
registries.
Useful commands for Container Registry and Artifact Registry tasks that do not
have an equivalent command in the Google Cloud CLI or the Docker command-line
tool, such as listing untagged images or copying images across registry hosts.
If gcrane isn't an appropriate option, you can use the Docker Registry HTTP API.
If using Docker or the gcrane tool is not an option, you can use the Docker
Registry HTTP API.
First, grant the required permissions to your user account. You can then use
the Google Cloud CLI to create an access token for requests.
The following example shows the command for listing tags, using
my-image as the image and my-project as the Google Cloud project. This
example also uses the jq command to filter and format the output returned by
requests, but it's optional. The jq tool is included in Cloud Shell.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-07 UTC."],[[["\u003cp\u003eContainer Registry is compatible with the Docker protocol, enabling direct image pushing and pulling using Docker clients.\u003c/p\u003e\n"],["\u003cp\u003eGoogle Cloud services like Cloud Build and Google Kubernetes Engine have default permissions to access repositories within the same project without requiring additional client setup.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003egcrane\u003c/code\u003e tool is recommended for interacting with Container Registry without using a Docker client, and it offers commands not available in the Google Cloud CLI or Docker's command-line tool.\u003c/p\u003e\n"],["\u003cp\u003eFor interactions beyond Docker or \u003ccode\u003egcrane\u003c/code\u003e, the Docker Registry HTTP API is available, and authenticating through it requires proper permissions and the use of a Google Cloud CLI access token.\u003c/p\u003e\n"],["\u003cp\u003eContainer Registry only supports monolithic uploads for container images, not chunked uploads.\u003c/p\u003e\n"]]],[],null,["# Docker Registry API\n\nContainer Registry implements a Docker protocol so that you can push and pull\nimages directly with Docker clients, including the\n[Docker command-line tool](https://docs.docker.com/engine/reference/commandline/cli/).\n\nGoogle Cloud services that typically integrate with\nContainer Registry, such as Cloud Build and Google Kubernetes Engine, are\nconfigured by with [default permissions](/container-registry/docs/access-control#integration) to access\nrepositories in the same project and do not require a separate client.\n\nIf you want to interact with Container Registry without the Docker client,\nwe recommend using the [gcrane](https://github.com/google/go-containerregistry/blob/main/cmd/gcrane/README.md) tool. The tool provides:\n\n- Simple commands that work with Container Registry, Artifact Registry, and other registries.\n- Useful commands for Container Registry and Artifact Registry tasks that do not have an equivalent command in the Google Cloud CLI or the Docker command-line tool, such as listing untagged images or copying images across registry hosts.\n\nIf gcrane isn't an appropriate option, you can use the Docker Registry HTTP API.\n\n- See [Authenticating using the Docker Registry API](#auth) for information about authentication using the API.\n- Refer to the [Docker Registry HTTP API V2](https://docs.docker.com/registry/spec/api/) documentation for details about the APi request format.\n\n| **Note:** Container Registry does not support Docker [chunked uploads](https://docs.docker.com/registry/spec/api/#chunked-upload). Some container image tools support uploading large container images with either chunked uploads or a single [monolithic upload](https://docs.docker.com/registry/spec/api/#monolithic-upload). You must use monolithic uploads when you push container images to Container Registry.\n\nAuthenticating using the Docker Registry HTTP API\n-------------------------------------------------\n\nIf using Docker or the `gcrane` tool is not an option, you can use the Docker\nRegistry HTTP API.\n\nFirst, grant the required [permissions](/container-registry/docs/access-control) to your user account. You can then use\nthe Google Cloud CLI to create an access token for requests.\n\nThe following example shows the command for [listing tags](https://docs.docker.com/registry/spec/api/#listing-image-tags), using\n`my-image` as the image and `my-project` as the Google Cloud project. This\nexample also uses the [jq](https://stedolan.github.io/jq/) command to filter and format the output returned by\nrequests, but it's optional. The `jq` tool is included in Cloud Shell. \n\n curl \\\n -H \"Authorization: Bearer $(gcloud auth print-access-token)\" \\\n \"https://gcr.io/v2/my-project/my-image/tags/list\" | jq \".tags\""]]