Skip to main content

Overview

GitHub Container Registry (GHCR) is GitHub’s container image registry service, integrated with GitHub repositories and Actions. It provides free storage for public images and supports private images for GitHub users.

Registry URL

https://ghcr.io

Image Format

ghcr.io/<owner>/<image-name>:<tag>
Examples:
  • ghcr.io/mycompany/api:latest
  • ghcr.io/myusername/frontend:v1.2.3

Authentication

GitHub Container Registry uses GitHub Personal Access Tokens (PAT) for authentication.

Required Permissions

Your Personal Access Token needs the following scopes:
  • read:packages - Pull images
  • write:packages - Push images (if needed)

Configuration in Qovery

1

Create Personal Access Token

  1. Go to GitHub → SettingsDeveloper settings
  2. Click Personal access tokensTokens (classic)
  3. Click Generate new token (classic)
  4. Give it a descriptive name (e.g., “Qovery GHCR Access”)
  5. Select required scopes:
    • read:packages
    • write:packages (if pushing images)
  6. Click Generate token and copy immediately
GitHub shows the token only once. Save it securely.
2

Access Organization Settings

Navigate to Organization SettingsContainer Registries in Qovery
3

Add Registry

Click Add Registry
4

Select GitHub Container Registry

Choose GitHub Container Registry from the registry type dropdown
5

Enter Credentials

Provide:
  • Username: Your GitHub username
  • Password: Personal Access Token (not your GitHub password)
6

Save

Qovery will verify the credentials and save the configuration

Organization Access

For organization-owned packages:
  • Ensure your PAT has access to the organization
  • Set package visibility appropriately (public/private)
  • Configure package permissions in GitHub

Integration with GitHub Actions

GHCR integrates seamlessly with GitHub Actions for CI/CD workflows:
- name: Push to GitHub Container Registry
  run: |
    echo ${{ secrets.GITHUB_TOKEN }} | docker login ghcr.io -u ${{ github.actor }} --password-stdin
    docker push ghcr.io/${{ github.repository }}/${{ env.IMAGE_NAME }}:${{ github.sha }}