Container images

The quickest way to run something: any image from Docker Hub, GitHub Container Registry or another registry the servers can pull from.

Create one

+ Create → Service → Container image, then enter the image, e.g. nginx:1.27, postgres:16 or ghcr.io/acme/api:2.3.

Updating

Change the image (say from :1.2 to :1.3) under the service's Settings: that starts a deployment. To fetch a moving tag like :latest again, press Deploy on the service's page.

Private registries

Give the organization a login for the registry, and its private images are pulled with it: services that run one, and builds whose Dockerfile starts FROM one.

alf registries add ghcr.io --username you

The token is asked for and not shown (or piped in: echo "$GHCR_TOKEN" | alf registries add ghcr.io --username you, for CI). In the dashboard: Settings → Registries. The registry is its host, as images from it start with: ghcr.io, registry.gitlab.com, registry.example.com:5000, or docker.io for Docker Hub. One login per registry; adding one again replaces it. Admins add and remove them.

RegistryUsernameToken
GitHub (ghcr.io)your GitHub usernamea personal access token (classic) with read:packages
Docker Hub (docker.io)your Docker IDan access token, read-only
GitLab (registry.gitlab.com)the token's usernamea deploy token with read_registry

A private image pulled without a login fails with pull access denied or unauthorized. The deployment says which registry needs a login.

alf registries lists the logins, and alf registries remove ghcr.io takes one away.