Custom (bring-your-own) images
When the curated catalog doesn't have what you need, a template service can point at any Docker image instead of a catalog entry. That image can come from Docker Hub, GitHub Container Registry, Amazon ECR, or any other registry — public or private.
Adding a custom image
In the template builder, choose Custom image instead of a catalog service and give it:
- An image repository without a tag — for example
ghcr.io/acme/worker,mongo, oramazon/dynamodb-local. (The tag goes in its own field; animage:tagtyped into the repository field is rejected.) - A tag — for example
7,latest, or1.2.3. - An optional service name (defaults to the image's last path segment), used as the compose service name.
Custom images take the same config block
as catalog services — env, command, ports, volumes, and resources. The
loopback-only and named-volume conventions apply to custom services too, but the
catalog's sensible defaults (default port, data path, auth env) do not — you
configure those yourself.
Over the API, a custom service's source is { "kind": "custom", "image": "…" }
rather than { "kind": "catalog", "catalogKey": "…" }. See the
API reference for the full template schema.
Unverified images
Catalog images are vetted by Slothbox; custom images are not. A custom image is
badged unverified in the UI, and it's pulled directly from the registry you
name. You're trusting the publisher of that image — review what you run, exactly
as you would with docker run locally.
Services imported from a compose file
are custom images too: even a stock postgres:16 imported that way is treated
as an unverified custom image, not mapped back to the curated catalog.
Image pinning
Catalog and custom images behave differently here:
- Catalog images are pinned to a digest (
sha256:…) when you save the template, so a bake gets the exact image the template was saved against. The friendly tag is still shown for readability; the digest is what gets baked. Pinning is best-effort: in the rare case the registry can't be reached at save time, the image is left on its tag. - Custom images are not digest-pinned. They are pulled by tag at each bake. The image baked into a given box image is fixed — every box launched from that bake runs the same bytes — but a rebake pulls whatever the tag points at then. There is no way to pin a custom image to a digest yet.
If reproducibility across rebakes matters, publish immutable tags from your CI
(a version or commit SHA) and point the service at those, rather than reusing a
moving tag like latest.
Next steps
- Private registries — give Slothbox the credentials to pull a custom image from a private registry.