Container images gateway browser and indexer
Website static server - Reverse Container image browser
Containerbay allows to serve OCI container artifacts as static websites and browse them from curl or your browser. Works also with MagicDNS(tm).
curl https://containerbay.io/ghcr.io/containerbay/containerbay.io:latest/
Some notable examples that you can just browse right away:
- Our example page here hosted on ghcr.io!
- openSUSE
- Alpine
- Alpine (mirror)
If there is no index page, it will fallback to list all the present files, so it can be used to browse also already existing container images content
Containerbay can be used to explore container images with curl, but can also be used to bind static domain, or run standalone servers that bind to a single image reference
Point your browser or either curl
to access the container's content in this form host/registry/org/image_name:tag/
, the host should be pointed to a containerbay instance ( like containerbay.io
):
curl https://containerbay.io/docker.io/opensuse/leap/etc/os-release
curl https://containerbay.io/docker.io/opensuse/leap@sha256:b603e69d71c9d9b3ec1fcd89d2db2f3c82d757e8a724a8602d6514dc4c77b1cb/
When Containerbay is running, it accepts container images from subdomains in the following format registry.org.image_name.tag.magicdns.io
For example, by using containerbay.io
curl http://docker.io.library.alpine.latest.containerbay.io/etc/os-release
will return /etc/os-release
from alpine:latest
.
Containerbay can associate a custom domain to a container image. In this way you can have images containing static HTML files and use it to serve a subdomain or a top level dns. See as an example repository.
Point your DNS to the containerbay instance via A
or CNAME
and add a corresponding TXT
record.
In the TXT
record, write the image you want to serve:
containerbay=library/alpine:latest
Containerbay can be used to deploy static website.
There is available a pack
command which is a helper in order to create tar archives from files that can be loaded from docker in order to be pushed over a registry, for instance, if you have a folder with a index.html:
# Create output.tar, and include api/public/index.html. We will name the container image will be ghcr.io/containerbay/containerbay.io:latest
containerbay pack --destination output.tar ghcr.io/containerbay/containerbay.io:latest api/public/index.html
# Load the image to the docker daemon
docker load -i output.tar
# Push the container image
docker push ghcr.io/containerbay/containerbay.io:latest
containerbay pack
accepts a destination output with the --destination
flag, first argument is the container image
Alternatively you can also just use docker
, or podman
or your favorite container builder, check the website
folder for an example.
Containerbay is currently a service deployed at containerbay.io.
You can although choose to deploy containerbay locally, using Docker or Kubernetes.
You can run containerbay with:
docker run -p 80:8080 \
-e CONTAINERBAY_LISTENADDR=:8080 \
-e CONTAINERBAY_MAGICDNS= \
-e CONTAINERBAY_MAXSIZE=100MB \
-e CONTAINERBAY_CLEANUPINTERVAL=1h \
-ti --restart=always --name containerbay ghcr.io/containerbay/containerbay run
The API endpoint will be accessible at localhost:80
There is a sample deployment file in kube
. Edit the ingress definition to fit your needs, there is also a traefik example configuration file for a wildcard DNS setup (magicDNS*)
As containerbay is a static binary, you can just download the binary from the releases and run it locally.
Containerbay from the CLI can run
as a proxy for multiple images, or run standalone
to point only to a specific image/tag.
There is also available a pack
subcommand as utility to create docker-loadable images from folders and directories.
Containerbay can also be used to serve a single container image reference only, for instance:
containerbay standalone <image/reference:tag>
Will start the API server serving the image on the default port (8080).
DockerHub applies pull rate limits to manifest fetching, containerbay
could hit those limit depending on the service usage. Other container registries like e.g. quay.io
don't have such limitations.
Currently containerbay is hosted merely on my own expenses, if you rely on this service, consider to donate or sponsor hosting for this service!
Ettore Di Giacinto
Icons made by Freepik from www.flaticon.com
GPL-3