# Private registries (/docs/template/private-registries)

<!-- agent-signals: reading_time_min: 1 · est_tokens: 806 · updated: 2026-07-30 -->
Related: [Quickstart](/docs/template/quickstart.md), [How it works](/docs/template/how-it-works.md), [User and workdir](/docs/template/user-and-workdir.md), [Caching](/docs/template/caching.md), [Base image](/docs/template/base-image.md), [Defining template](/docs/template/defining-template.md)

If your base image is hosted in a private registry, you can provide credentials using the following helpers:

* General registry
* GCP Artifact Registry
* AWS ECR

## General registry [#general-registry]

<CodeGroup>
  <CodeBlockTabs defaultValue="JavaScript & TypeScript" groupId="javascript-typescript+python">
    <CodeBlockTabsList>
      <CodeBlockTabsTrigger value="JavaScript & TypeScript">
        JavaScript & TypeScript
      </CodeBlockTabsTrigger>

      <CodeBlockTabsTrigger value="Python">
        Python
      </CodeBlockTabsTrigger>
    </CodeBlockTabsList>

    <CodeBlockTab value="JavaScript & TypeScript">
      ```typescript  
      Template().fromImage('ubuntu:22.04', {
        username: 'user',
        password: 'pass',
      })
      ```
    </CodeBlockTab>

    <CodeBlockTab value="Python">
      ```python  
      Template().from_image(
          image="ubuntu:22.04",
          username="user",
          password="pass",
      )
      ```
    </CodeBlockTab>
  </CodeBlockTabs>
</CodeGroup>

## GCP Artifact Registry [#gcp-artifact-registry]

<CodeGroup>
  <CodeBlockTabs defaultValue="JavaScript & TypeScript" groupId="javascript-typescript+python">
    <CodeBlockTabsList>
      <CodeBlockTabsTrigger value="JavaScript & TypeScript">
        JavaScript & TypeScript
      </CodeBlockTabsTrigger>

      <CodeBlockTabsTrigger value="Python">
        Python
      </CodeBlockTabsTrigger>
    </CodeBlockTabsList>

    <CodeBlockTab value="JavaScript & TypeScript">
      ```typescript  
      // From file path
      Template().fromGCPRegistry('ubuntu:22.04', {
        serviceAccountJSON: './service_account.json',
      })

      // From object
      Template().fromGCPRegistry('ubuntu:22.04', {
        serviceAccountJSON: { project_id: '123', private_key_id: '456' },
      })
      ```
    </CodeBlockTab>

    <CodeBlockTab value="Python">
      ```python  
      # From file path
      Template().from_gcp_registry(
          image="ubuntu:22.04",
          service_account_json="./service_account.json",
      )

      # From object
      Template().from_gcp_registry(
          image="ubuntu:22.04",
          service_account_json={"project_id": "123", "private_key_id": "456"},
      )
      ```
    </CodeBlockTab>
  </CodeBlockTabs>
</CodeGroup>

## AWS ECR [#aws-ecr]

<CodeGroup>
  <CodeBlockTabs defaultValue="JavaScript & TypeScript" groupId="javascript-typescript+python">
    <CodeBlockTabsList>
      <CodeBlockTabsTrigger value="JavaScript & TypeScript">
        JavaScript & TypeScript
      </CodeBlockTabsTrigger>

      <CodeBlockTabsTrigger value="Python">
        Python
      </CodeBlockTabsTrigger>
    </CodeBlockTabsList>

    <CodeBlockTab value="JavaScript & TypeScript">
      ```typescript  
      Template().fromAWSRegistry('ubuntu:22.04', {
        accessKeyId: '123',
        secretAccessKey: '456',
        region: 'us-west-1',
      })
      ```
    </CodeBlockTab>

    <CodeBlockTab value="Python">
      ```python  
      Template().from_aws_registry(
          image="ubuntu:22.04",
          access_key_id="123",
          secret_access_key="456",
          region="us-west-1",
      )
      ```
    </CodeBlockTab>
  </CodeBlockTabs>
</CodeGroup>
