Skip to main content

Using a Private Docker Registry

For air-gapped environments or organizations with strict network policies, you can mirror all CrewAI Platform images to your private Docker registry. This guide covers pulling images from CrewAI’s registry and configuring the Helm chart to use your private registry.
This guide covers container image mirroring. For air-gapped environments, you may also need to mirror the Python package index for crew builds. See the Private PyPI Registry Mirror guide.
Crew automation deployments require a writable target registry. CrewAI Platform builds crew images internally and pushes them to envVars.CREW_IMAGE_REGISTRY_OVERRIDE.

Prerequisites

For full writable registry requirements and supported registry options, see Requirements.

Step 1: Authenticate to CrewAI Registry

Access your registry credentials via the CrewAI enterprise customer portal at https://enterprise.crewai.com/crewai, or create a service account in the Team Settings section for automated access.
These are the same credentials used for Helm registry authentication. Replace customer@company.com with your actual customer email and [YOUR_SECRET_TOKEN] with the token provided in the customer portal.

Step 2: Pull Required Images

Pull all required images from the CrewAI registry. The exact versions should match your Helm chart version.

Current Image List (Chart v0.1.13)

Version Alignment: The image versions shown above correspond to Helm chart v0.1.13.

Step 3: Tag Images for Your Registry

Tag the pulled images with your private registry URL:

Step 4: Push Images to Your Registry

Partial Registry: Crew Images Only

If you only need crew-built images stored in your private registry (not platform images), you do not need to mirror the full image list above. Use CREW_IMAGE_REGISTRY_OVERRIDE only:
Do NOT set global.imageRegistry for partial-mirror deployments. global.imageRegistry redirects ALL platform image pulls (Redis, BuildKit, Wharf, busybox, the main application) away from images.crewai.com. If these images are not in your registry, every platform pod fails with ImagePullBackOff. Only set global.imageRegistry if you have mirrored every image listed in Step 2 above.

Step 5: Configure Helm Values

Update your values.yaml to point to your private registry:
The credHelper mechanism invokes an external binary at build time (used by BuildKit for crew image pushes). It does NOT enable kubelet to pull platform images — see ECR Authentication: credHelper vs Pod Identity / IRSA for the distinction.

Using a Generic Private Registry

AWS ECR

global.imageRegistry redirects ALL platform image pulls — including Redis, BuildKit, Busybox, Wharf, and the main application — away from images.crewai.com. Only set this value if you have mirrored EVERY image listed in Step 2 above to your private registry. If you only need crew build images in your private registry, omit global.imageRegistry and global.imageNamePrefixOverride entirely and set only CREW_IMAGE_REGISTRY_OVERRIDE.
credHelper limitation: The credHelper: "ecr-login" configuration is used by BuildKit for building and pushing crew images. It does not enable kubelet to pull platform images from ECR — kubelet does not execute credential helpers from image pull secrets. For kubelet ECR access, rely on node-level IAM (EKS worker nodes authenticate to same-account ECR automatically) or use a controller that refreshes static tokens. See AWS Integration Guide for details.
credHelper: "ecr-login" is AWS ECR-specific. This credential helper mechanism only works with Amazon ECR. Do NOT use credHelper for Azure Container Registry (ACR), Google Artifact Registry (GAR), or any other registry. Non-AWS registries require the username/password fields shown in the ACR example below. Using an unsupported credHelper value causes ImagePullBackOff on all pods with no clear error message.

Azure Container Registry

global.imageRegistry redirects ALL platform image pulls — including Redis, BuildKit, Busybox, Wharf, and the main application — away from images.crewai.com. Only set this value if you have mirrored EVERY image listed in Step 2 above to your private registry. If you only need crew build images in your private registry, omit global.imageRegistry and global.imageNamePrefixOverride entirely and set only CREW_IMAGE_REGISTRY_OVERRIDE.

Automation Script

For convenience, use this script to automate the pull/tag/push process:
Save this script as mirror-images.sh, make it executable, and run:

Verification

After configuring your Helm values and deploying, verify the pods are pulling from your private registry:
All images should show your private registry URL.

Troubleshooting

Image Pull Errors

If you see ImagePullBackOff errors:
  1. Verify registry credentials have been correctly set
  2. Ensure image names and tags match exactly