---
title: Changing Your Container Registry
description: >-
  Switch between Datadog container image registries for different deployment
  environments and requirements
breadcrumbs: Docs > Containers > Containers Guides > Changing Your Container Registry
---

# Changing Your Container Registry

Datadog publishes container images on the Datadog Container Registry, Google Artifact Registry (GAR), Amazon ECR, Azure ACR, and Docker Hub:

| Registry                          | Path                     |
| --------------------------------- | ------------------------ |
| Datadog Container Registry        | `registry.datadoghq.com` |
| Google Artifact Registry          | `gcr.io/datadoghq`       |
| Google Artifact Registry (Europe) | `eu.gcr.io/datadoghq`    |
| Google Artifact Registry (Asia)   | `asia.gcr.io/datadoghq`  |
| Amazon ECR                        | `public.ecr.aws/datadog` |
| Azure ACR                         | `datadoghq.azurecr.io`   |
| Docker Hub                        | `docker.io/datadog`      |

## Choosing a container registry{% #choosing-a-container-registry %}

When selecting a container registry, Datadog recommends the following approach:

1. **Private pull-through cache**: Set up a pull-through cache in your own infrastructure. This provides the best control over your image dependencies. See your cloud provider's documentation:

   - AWS: [Amazon ECR pull through cache](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache.html)
   - GCP: [Artifact Registry remote repositories](https://cloud.google.com/artifact-registry/docs/repositories/remote-repo)
   - Azure: [Azure Container Registry cache](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-artifact-cache)

1. **Cloud-provider registries**: If your deployment is in a specific cloud provider (AWS, GCP, or Azure), use the corresponding Datadog public registry:

   - AWS deployments: `public.ecr.aws/datadog`
   - GCP deployments: `gcr.io/datadoghq`, `eu.gcr.io/datadoghq`, or `asia.gcr.io/datadoghq`
   - Azure deployments: `datadoghq.azurecr.io`

1. **Datadog Container Registry**: Use `registry.datadoghq.com` for simplicity. This registry requires no additional setup and has very high rate limits. Ensure your firewall allows traffic to `us-docker.pkg.dev/datadog-prod/public-images`, as the registry may redirect requests to this URL.

1. **Docker Hub**: Avoid unless you have a Docker Hub subscription, as it is subject to rate limits. Only Docker Hub supports Notary for image signature verification.

{% alert level="info" %}
As of version 2.19.0, the Datadog Operator chart is progressively migrating to the Datadog Container Registry (`registry.datadoghq.com`).
{% /alert %}

To update your registry, update your registry values based on the type of container environment you are deploying on. You can also use a private registry, but you need to [create a pull secret](https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/#registry-secret-existing-credentials) to pull the images.

## Docker{% #docker %}

### Updating your registry{% #updating-your-registry %}

To update your containers registry, run the pull command for the new registry. To see the Docker pull commands for different container registries, see the examples in the [Overview of the Docker docs page](https://docs.datadoghq.com/agent/docker/?tab=standard).

## Kubernetes with Helm chart{% #kubernetes-with-helm-chart %}

To update your containers registry while deploying the Datadog Agent (or Datadog Cluster Agent) with the Datadog helm chart on Kubernetes (including GKE, EKS, AKS, and OpenShift) update the `values.yaml` to specify a different registry:

### Datadog Helm chart >= v2.7.0{% #datadog-helm-chart--v270 %}

1. Update your `values.yaml`:
   ```yaml
   registry: registry.datadoghq.com
   ```
1. Remove any overrides for `agents.image.repository`, `clusterAgent.image.repository`, or `clusterChecksRunner.image.repository` in the `values.yaml`.

### Datadog Helm chart < v2.7.0{% #datadog-helm-chart--v270-1 %}

Change the repository to the registry of your choice. For example, using the Datadog Container Registry:

```yaml
agents:
  image:
    repository: registry.datadoghq.com/agent

clusterAgent:
  image:
    repository: registry.datadoghq.com/cluster-agent

clusterChecksRunner:
  image:
    repository: registry.datadoghq.com/agent
```

For more information about using the Datadog Helm chart, see the [Datadog Kubernetes documentation](https://docs.datadoghq.com/agent/kubernetes/?tab=helm) and the example [`values.yaml`](https://github.com/DataDog/helm-charts/blob/dae884481c5b3c9b67fc8dbd69c944bf3ec955e9/charts/datadog/values.yaml#L19) file.

If using a private registry, you will need to add a pull secret to the `[key].image.pullSecrets` field to each image.

```yaml
agents:
  image:
    pullSecrets:
      - name: PrivateRegistrySecret

clusterAgent:
  image:
    pullSecrets:
    - name: PrivateRegistrySecret

clusterChecksRunner:
  image:
    pullSecrets:
    - name: PrivateRegistrySecret
```

## Kubernetes with the Datadog Operator{% #kubernetes-with-the-datadog-operator %}

As of Operator chart version 2.19.0, the Datadog Operator is migrating to `registry.datadoghq.com` for both the operator image and Agent images it manages. Previously, Agent images were pulled from site-specific registries (`gcr.io/datadoghq`, `eu.gcr.io/datadoghq`, `asia.gcr.io/datadoghq`, or `datadoghq.azurecr.io`). To keep using the previous site-specific registries, set `registryMigrationMode: ""` in your Operator Helm `values.yaml`.

To update your registry while deploying the Datadog Agent (or Datadog Cluster Agent) with the Datadog Operator:

1. Update the Datadog Agent manifest file to override the default registry (`registry.datadoghq.com`). For example, with `public.ecr.aws/datadog`:

```yaml
apiVersion: datadoghq.com/v2alpha1
kind: DatadogAgent
metadata:
  name: datadog
spec:
  global:
    registry: public.ecr.aws/datadog
  // ..
```
Remove any overrides for the `spec.override.nodeAgent.image.name`, `spec.override.clusterAgent.image.name`, and `spec.override.clusterChecksRunner.image.name` fields.If using a private registry, you will need to add a pull secret to the `[key].image.pullSecrets` field to each image.
```yaml
apiVersion: datadoghq.com/v2alpha1
kind: DatadogAgent
metadata:
  name: datadog
spec:
  override:
    nodeAgent:
      image:
        pullSecrets:
          - name: PrivateRegistrySecret
    clusterAgent:
      image:
        pullSecrets:
          - name: PrivateRegistrySecret
    clusterChecksRunner:
      image:
        pullSecrets:
          - name: PrivateRegistrySecret
  // ..
```

For more information about the Datadog Operator, see [Deploying an Agent with the Operator](https://docs.datadoghq.com/agent/kubernetes/?tab=operator#deploy-an-agent-with-the-operator).

### Using another container registry with Helm{% #using-another-container-registry-with-helm %}

You can switch from the default `registry.datadoghq.com` registry to another registry, such as `public.ecr.aws/datadog` when installing the Operator with the Helm chart:

Update [`values.yaml`](https://github.com/DataDog/helm-charts/blob/main/charts/datadog-operator/values.yaml#L28) with the new image:

```yaml
image:
  repository: public.ecr.aws/datadog
```

## ECS{% #ecs %}

To update your registry while deploying on ECS, in the `datadog-agent-ecs.json` file, change the value of the `"image"` key under `containerDefinitions` to `"public.ecr.aws/datadog/agent:latest"`:

```json
"image": "public.ecr.aws/datadog/agent:latest",
```

For more information about deploying Datadog on ECS, see the [Datadog ECS documentation](https://docs.datadoghq.com/agent/amazon_ecs/?tab=awscli) and the example [`datadog-agent-ecs.json`](https://docs.datadoghq.com/agent/amazon_ecs/?tab=awscli) file.

## Fargate{% #fargate %}

To update your registry while deploying on Fargate, update the image in the Fargate task definition to use `public.ecr.aws`:

```json
"image": "public.ecr.aws/datadog/agent:latest"
```

The next time the task starts, it pulls from `public.ecr.aws` instead of Docker Hub. For more information about deploying on Fargate, see [Deploying the Agent on ECS](https://www.datadoghq.com/blog/aws-fargate-monitoring-with-datadog/#deploy-the-agent-on-ecs) and [Deploying the Agent on EKS](https://www.datadoghq.com/blog/aws-fargate-monitoring-with-datadog/#deploy-the-agent-on-eks).

## Cluster Agent{% #cluster-agent %}

If you're using the Helm chart to deploy the Datadog Agent and the Datadog Cluster Agent, follow the instructions in Kubernetes with Helm chart, and no other updates are needed. The change to the Helm `values.yaml` outlined above changes the repository that both the Cluster Agent and the Datadog Agent are pulled from.

If you're using the Datadog Operator to deploy the Datadog Cluster Agent, follow the instructions in Kubernetes with the Datadog Operator, and no other updates are needed. The instructions for updating the Operator configuration updates the repository that both the Cluster Agent and the Datadog Agent are pulled from.

For more information about the Datadog Cluster Agent, see the [Cluster Agent docs](https://docs.datadoghq.com/agent/cluster_agent/), and the [setup docs](https://docs.datadoghq.com/agent/cluster_agent/setup/?tab=helm).

## Kubernetes Helm for the Datadog Private Location worker{% #kubernetes-helm-for-the-datadog-private-location-worker %}

To update your registry for the Private Location worker, update the `datadog/synthetics-private-location-worker` image to a different registry such as `public.ecr.aws/datadog/synthetics-private-location-worker` or `gcr.io/datadoghq/synthetics-private-location-worker`.

To change the default repository (`gcr.io/datadoghq`), update the `values.yaml` with the new image:

```yaml
image:
  repository: public.ecr.aws/datadog/synthetics-private-location-worker
```
