Private registries
Clouduler pulls images with the registry logins you store, and checks the login against the registry before saving it. Use it for private images on GitHub Container Registry (GHCR) or Docker Hub, or to avoid Docker Hub's anonymous rate limits.
What you'll end up with
A stored, verified login for a registry. Image pulls and the Updates page use it for images from that registry. The password is sealed (_clouduler_registry_<server>) and never shown again.
Prerequisites
- An account on the registry and a private image to pull, or a rate-limit problem to solve.
- A Clouduler admin sign-in.
Registry names are normalised: docker.io, index.docker.io, registry-1.docker.io and hub.docker.com all mean Docker Hub, and a leading https:// and a trailing / are stripped.
GitHub Container Registry (GHCR)
GitHub Packages accepts only classic personal access tokens here, not fine-grained ones.
- Click your avatar in the top right, then Settings.
- At the bottom of the sidebar open Developer settings, then Personal access tokens, then Tokens (classic).
- Click Generate new token, then Generate new token (classic).
- Note:
clouduler-ghcr-pull. Expiration: pick a date and write down the renewal date, or No expiration. - Tick read:packages only. Pulling needs nothing else.
- Click Generate token and copy it now. It starts with
ghp_and is shown once. - If the image belongs to an organisation with SSO, authorise the token for that organisation on the token page.
You will enter: server ghcr.io, username your GitHub login, password the ghp_... token.
Docker Hub
- Sign in to Docker Home (hub.docker.com) and verify your email if asked; tokens cannot be created without it.
- Click your avatar, then Account settings, then Personal access tokens.
- Click Generate new token.
- Description:
clouduler-pull. Expiration: the default is None; 30 days, 90 days or a custom date are offered. - Access permissions: choose a read-only level that covers your private repositories.
- Click Generate and copy the token now.
You will enter: server docker.io, username your Docker ID, password the access token (not the account password, which does not work when 2FA or SSO is on).
Store the login in Clouduler
- Web UI
- CLI / config
- Open Updates (
/updates) and click Manage registry accounts. - Pick the registry or type its address (
ghcr.ioordocker.io). - Enter the username and password (the token).
- Click Test connection, then Save login.
To remove one, use the remove action and confirm "Remove the login for NAME?". Images from that registry may stop pulling.
echo "$CR_PAT" | clouduler registry login ghcr.io --username example-user --password-stdin
clouduler registry login docker.io --username example-dockerid # prompts for the password
clouduler registry list
clouduler registry test ghcr.io
clouduler registry remove ghcr.io # alias: rm
Prefer stdin: --password on the command line is visible to ps. Messages: logged in to ghcr.io as example-user, ghcr.io accepted the stored login, removed the login for ghcr.io, no registry logins stored.
Test it
clouduler registry test ghcr.ioshould printghcr.io accepted the stored login.- Deploy a stack that uses a private image, for example
image: ghcr.io/example-org/app:1.0, and watch it go from pending to running. - On Updates, the container should show a real Latest digest instead of Unknown; press Check again to refresh.
Troubleshooting
| You see | Cause | Fix |
|---|---|---|
the password is empty / the username is empty | A field was left blank. | Fill both. |
| The test fails with an authentication error | Wrong scope, expired token, or account password used on Docker Hub. | Make a new token with read:packages (GHCR) or a read access token (Docker Hub). |
| GHCR rejects a fine-grained token | Only classic tokens are supported. | Create a classic token. |
| Org images are denied | SSO not authorised for the token. | Authorise the token for the organisation. |
| Updates shows Unknown with Add registry login | Authentication error from the registry. | Store the login. |
| Docker Hub 429 (rate limit) | Anonymous pulls are limited. | Store a Docker Hub login. Lookups back off automatically. |
| Pulls fail after the token expired | The stored login still holds the old token. | Save the new token over it. |