node package manager



Docker registry implemented in Node.

npm install -g docker-registry-server

You can also pull the docker image

docker pull mafintosh/docker-registry-server


To start it run


Currently data will be stored in ./layers and ./db. For more info run docker-registry-server --help


Per default there is no authentication (meaning everyone can push/pull images). You can use the --user command line option to limit registry access.

docker-registry-server --user mafintosh:secret --user another:hunter2


Similar to a git repository you can specify hooks that are executed when certain events happen. Currently the following hooks are supported

  • tag (id, tag) Triggered when an image is tagged (happens when you push a tagged image)
  • image (id) Triggered when an image metadata is uploaded
  • layer (id) Triggered when an image layer is uploaded
  • verify (id) Triggered when an image layer+metadata has been verified
  • index (id) Triggered when an image file system data has been indexed

The tag hook is especially useful as it allows you to set up a push->deploy flow.

To add a hook specify it as a command line argument prefixed with --on-{name} {bash-script}

docker-registry-server --on-tag "echo image \$1 was tagged with \$2 - please deploy"

Or add them in a ./hooks/{name} file


The registry should support all of the APIs specified in the docker docs. In addition, the following APIs are available

GET /v1/images/{id}/tree/{directory}

Returns a JSON array containing the files/folders in {directory} in the image {id}. Fx if you have an image, 4a21b50675ba611ab0e9236c4f9430348d932ea3bf6e9b2af86b47eca9088320 and you want to list the files in /root do

curl localhost:8000/v1/images/4a21b50675ba611ab0e9236c4f9430348d932ea3bf6e9b2af86b47eca9088320/tree/root

GET /v1/images/{id}/blobs/{filename}

Get the file content of {filename} in the image {id}. Fx if you have the same image as above and want to read /root/package.json do

curl localhost:8000/v1/images/4a21b50675ba611ab0e9236c4f9430348d932ea3bf6e9b2af86b47eca9088320/tree/root/package.json

GET /v1/events

Get a newline delimited JSON stream on events from the registry. Use type={name} to limit the events you get.

curl localhost:8000/v1/events?type=tag