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, seeContainer Registry deprecation.
Stay organized with collectionsSave 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 theDocker command-line tool.
Google Cloud services that typically integrate with
Container Registry, such as Cloud Build and Google Kubernetes Engine, are
configured by withdefault permissionsto 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 thegcranetool. 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 thegcranetool is not an option, you can use the Docker
Registry HTTP API.
First, grant the requiredpermissionsto your user account. You can then use
the Google Cloud CLI to create an access token for requests.
The following example shows the command forlisting tags, usingmy-imageas the image andmy-projectas the Google Cloud project. This
example also uses thejqcommand to filter and format the output returned by
requests, but it's optional. Thejqtool 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-09-04 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\""]]