---
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" %}
The Datadog Agent Helm chart determines the default Agent image registry from your Datadog site, cluster type, and `registryMigrationMode`. The Datadog Operator chart is included as a dependency of the Datadog Agent Helm chart by default. As of Datadog Operator chart version 2.19.0, when you install the Operator through that dependency, the Datadog Agent Helm chart's `registryMigrationMode` applies to Agent images managed by the Operator. The Operator Helm chart itself does not define `registryMigrationMode`; the Operator pod image is controlled separately by the Operator chart `image.repository` value.
{% /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.md?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`. For example, to use Amazon ECR:
   ```yaml
   registry: public.ecr.aws/datadog
   ```
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.md?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 Datadog Operator chart version 2.19.0, when the Operator is installed through the Datadog Agent Helm chart dependency, the Datadog Agent Helm chart's `registryMigrationMode` can use `registry.datadoghq.com` for Agent images managed by the Operator. Earlier versions pulled Agent images from site-specific registries (`gcr.io/datadoghq`, `eu.gcr.io/datadoghq`, `asia.gcr.io/datadoghq`, or `datadoghq.azurecr.io`). To use the previous site-specific registries for Agent images in this deployment path, set `registryMigrationMode: ""` in your Datadog Agent Helm chart `values.yaml`. This setting has no effect when you explicitly set a registry, and it is not a setting in the standalone Operator Helm chart. To use a different registry for the Operator pod image, set `image.repository` 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 resolved registry. 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.md?tab=operator#deploy-an-agent-with-the-operator).

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

To use another registry for the Operator pod image, such as `public.ecr.aws/datadog`, when installing the standalone Operator 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.md?tab=awscli) and the example [`datadog-agent-ecs.json`](https://docs.datadoghq.com/agent/amazon_ecs.md?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.md), and the [setup docs](https://docs.datadoghq.com/agent/cluster_agent/setup.md?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
```
