Public | Automated Build

Last pushed: 2 months ago
Short Description
As simple as possible docker registry frontend (UI) for your private docker registry
Full Description


As simple as possible frontend for your private docker registry



  • V2 registries support only (secure, self-signed and insecure, DNS and IP:PORT)
  • internal DB (BoltBD) gives it ability to store info, and as a result it responses much faster than after direct api call, and can provide more data
  • app can parse, store and show info from registry such as:
    • image layers info:
      • name / tag
      • image size and push numbers
      • upload and push dates
    • image creating commands history
  • it is possible to set multiple repositories and watch all registries in one place
  • show statistics pretty, draw curves of uploads number and image sizes for a tag with respects to dates
  • find a parent of an image, in case, the parent in the same repo (it is clickable!)
  • show tree-graph of parents for image
  • (new) enabled image deletion (registry --version >= 2.4.0)
  • (the newest) API compatibility checks
  • (killer feature) Bearer token auth support (secure and self-signed auth servers)

Image deletion

To enable image deletion you need to:

  1. Run your registry with the flag -e REGISTRY_STORAGE_DELETE_ENABLED=true
    docker run -d -p 5000:5000 --restart=always --name registry \
    -v ./auth:/auth \
    -e "REGISTRY_AUTH=htpasswd" \
    -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
    -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
  2. Set up cron to run garbage collection
    10 * * * * docker exec registry bin/registry garbage-collect /etc/docker/registry/config.yml
  3. Also be aware, that there is a known issue in docker registry 2.5.1 in earlier. It means, that if you delete an image from a repository, you will not able to push the exactly same image in that repository. To fix it, you will need each time to perform rebuilding of image with --no-cache mode or restarting the registry docker restart registry.

See more:

Bearer token auth

What is it and how it works see docker documentation.
Bow was tested to work with cesanta/docker_auth in this configuration.


I can say that this app almost fit my needs, so in all likelihood, soon, I will not improve it hardly, but this is the list of ideas just for case:

  • "update repos" button (not wait for sleep time)
  • info for the whole repository: size, the number of pushes so on so on so on

How to start use Bow

docker run -d \
   --name=Bow \
   -e BS_LOG_SILENT=yes \
   -v ~/db/bow:/var/lib/bow \
   -p 5001:19808 \

How to start contribute to Bow

If you have interest, you can easily start with

git clone
git clone project/resources/treant-js
cd bow
docker-compose -f develop/devlinux.yml up -d
docker exec -it develop_golang_1 go get
docker exec -it develop_golang_1 go test -v qurl -repo=''
docker exec -it develop_golang_1 go run main.go

Code and packages

This app is written on golang with use of standard packages and: -- BoltDB -- to make cli shiny -- to develop on docker-machine -- to draw best graphs ever -- to draw parents graphs

Docker Pull Command
Source Repository