---
title: "Deploy Docker Registry"
description: "Private Docker registry: login required, images on a Railway bucket"
category: "Storage"
url: https://railway.com/deploy/docker-registry-1
---

# Deploy Docker Registry

Private Docker registry: login required, images on a Railway bucket

**[Deploy Docker Registry on Railway](https://railway.com/template/docker-registry-1)**

Machine-readable deploy manifest (JSON, validated by TemplateCI): https://railway.com/deploy/docker-registry-1/manifest.json

- **Creator:** Agaz Self-Host
- **Category:** Storage

## Template content

### Registry https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/docker.svg

- **Image:** registry:3.1.2@sha256:38907510915c3f1604c7e83d6ab602ab3020d092f73bdaed8696773693ff768c
- **Start command:** `/bin/sh -c 'echo IyEvYmluL3NoCiMgU3RhcnQgc2NyaXB0IGZvciB0aGUgRG9ja2VyIFJlZ2lzdHJ5IFJhaWx3YXkgdGVtcGxhdGUuCiMgV3JpdGVzIC9ldGMvZGlzdHJpYnV0aW9uL2NvbmZpZy55bWwgYW5kIGEgYmNyeXB0IGh0cGFzc3dkIGZpbGUsIHRoZW4gc3RhcnRzCiMgdGhlIHJlZ2lzdHJ5LiBJdCByZWZ1c2VzIHRvIHN0YXJ0IHdpdGhvdXQgYSBwYXNzd29yZCwgc28gdGhlIHJlZ2lzdHJ5IGlzCiMgbmV2ZXIgb3BlbiB0byBhbm9ueW1vdXMgcHVsbHMgb3IgcHVzaGVzLgpzZXQgLWV1Cgpsb2coKSB7IGVjaG8gIltyYWlsd2F5XSAkKiIgPiYyOyB9CgpVU0VSTkFNRT0iJHtSRUdJU1RSWV9VU0VSTkFNRTotYWRtaW59IgpQQVNTV09SRD0iJHtSRUdJU1RSWV9QQVNTV09SRDotfSIKaWYgWyAteiAiJFBBU1NXT1JEIiBdOyB0aGVuCiAgbG9nICJSRUdJU1RSWV9QQVNTV09SRCBpcyBlbXB0eS4gUmVmdXNpbmcgdG8gc3RhcnQgYW4gb3BlbiByZWdpc3RyeS4iCiAgZXhpdCAxCmZpCmNhc2UgIiRVU0VSTkFNRSIgaW4KICAqOip8IiIpIGxvZyAiUkVHSVNUUllfVVNFUk5BTUUgbXVzdCBiZSBub24tZW1wdHkgYW5kIG11c3Qgbm90IGNvbnRhaW4gJzonLiI7IGV4aXQgMSA7Owplc2FjCgojIGh0cGFzc3dkIChhcGFjaGUyLXV0aWxzKSBpc24ndCBpbiB0aGUgb2ZmaWNpYWwgaW1hZ2UsIGFuZCB0aGUgcmVnaXN0cnkgb25seQojIGFjY2VwdHMgYmNyeXB0IGhhc2hlcywgc28gaW5zdGFsbCBpdCBvbiBmaXJzdCBzdGFydC4KaWYgISBjb21tYW5kIC12IGh0cGFzc3dkID4vZGV2L251bGwgMj4mMTsgdGhlbgogIG49MAogIHVudGlsIGFwayBhZGQgLS1uby1jYWNoZSAtLXF1aWV0IGFwYWNoZTItdXRpbHMgPi9kZXYvbnVsbCAyPiYxOyBkbwogICAgbj0kKChuICsgMSkpCiAgICBpZiBbICIkbiIgLWdlIDEwIF07IHRoZW4gbG9nICJDb3VsZCBub3QgaW5zdGFsbCBodHBhc3N3ZC4gTm90IHN0YXJ0aW5nLiI7IGV4aXQgMTsgZmkKICAgIGxvZyAiYXBrIGFkZCBhcGFjaGUyLXV0aWxzIGZhaWxlZCwgcmV0cnlpbmcgKCRuLzEwKSIKICAgIHNsZWVwIDMKICBkb25lCmZpCgpta2RpciAtcCAvZXRjL2Rpc3RyaWJ1dGlvbi9hdXRoCnByaW50ZiAiJXNcbiIgIiRQQVNTV09SRCIgfCBodHBhc3N3ZCAtbmlCICIkVVNFUk5BTUUiID4gL2V0Yy9kaXN0cmlidXRpb24vYXV0aC9odHBhc3N3ZApjaG1vZCA2MDAgL2V0Yy9kaXN0cmlidXRpb24vYXV0aC9odHBhc3N3ZAoKcSgpIHsgcHJpbnRmICJcIiVzXCIiICIkKHByaW50ZiAiJXMiICIkMSIgfCBzZWQgLWUgInMvXFxcXC9cXFxcXFxcXC9nIiAtZSAicy9cIi9cXFxcXCIvZyIpIjsgfQoKaWYgWyAtbiAiJHtTM19CVUNLRVQ6LX0iIF07IHRoZW4KICA6ICIke1MzX0FDQ0VTU19LRVlfSUQ6P1MzX0FDQ0VTU19LRVlfSUQgaXMgcmVxdWlyZWQgd2l0aCBTM19CVUNLRVR9IgogIDogIiR7UzNfU0VDUkVUX0FDQ0VTU19LRVk6P1MzX1NFQ1JFVF9BQ0NFU1NfS0VZIGlzIHJlcXVpcmVkIHdpdGggUzNfQlVDS0VUfSIKICA6ICIke1MzX0VORFBPSU5UOj9TM19FTkRQT0lOVCBpcyByZXF1aXJlZCB3aXRoIFMzX0JVQ0tFVH0iCiAgU1RPUkFHRT0iICBzMzoKICAgIGFjY2Vzc2tleTogJChxICIkUzNfQUNDRVNTX0tFWV9JRCIpCiAgICBzZWNyZXRrZXk6ICQocSAiJFMzX1NFQ1JFVF9BQ0NFU1NfS0VZIikKICAgIHJlZ2lvbjogJChxICIke1MzX1JFR0lPTjotYXV0b30iKQogICAgcmVnaW9uZW5kcG9pbnQ6ICQocSAiJFMzX0VORFBPSU5UIikKICAgIGJ1Y2tldDogJChxICIkUzNfQlVDS0VUIikKICAgIGZvcmNlcGF0aHN0eWxlOiAke1MzX0ZPUkNFX1BBVEhfU1RZTEU6LWZhbHNlfQogICAgcm9vdGRpcmVjdG9yeTogL3JlZ2lzdHJ5IgogIGxvZyAiU3RvcmFnZTogUzMgYnVja2V0ICRTM19CVUNLRVQgYXQgJFMzX0VORFBPSU5UIgplbHNlCiAgREFUQV9ESVI9IiR7UkVHSVNUUllfREFUQV9ESVI6LS92YXIvbGliL3JlZ2lzdHJ5fSIKICBta2RpciAtcCAiJERBVEFfRElSIgogIFNUT1JBR0U9IiAgZmlsZXN5c3RlbToKICAgIHJvb3RkaXJlY3Rvcnk6ICQocSAiJERBVEFfRElSIikiCiAgbG9nICJTdG9yYWdlOiBmaWxlc3lzdGVtIGF0ICREQVRBX0RJUiAobm8gUzNfQlVDS0VUIHNldCkiCmZpCgppZiBbICIke1JFR0lTVFJZX1JFRElSRUNUOi10cnVlfSIgPSAiZmFsc2UiIF07IHRoZW4gUkVESVJFQ1RfRElTQUJMRT10cnVlOyBlbHNlIFJFRElSRUNUX0RJU0FCTEU9ZmFsc2U7IGZpClNFQ1JFVD0iJHtSRUdJU1RSWV9IVFRQX1NFQ1JFVDotJChoZWFkIC1jIDMyIC9kZXYvdXJhbmRvbSB8IG9kIC1BbiAtdHgxIHwgdHIgLWQgIiBcbiIpfSIKCmNhdCA+IC9ldGMvZGlzdHJpYnV0aW9uL2NvbmZpZy55bWwgPDxZQU1MCnZlcnNpb246IDAuMQpsb2c6CiAgbGV2ZWw6ICR7UkVHSVNUUllfTE9HX0xFVkVMOi1pbmZvfQogIGZpZWxkczoKICAgIHNlcnZpY2U6IHJlZ2lzdHJ5CnN0b3JhZ2U6CiRTVE9SQUdFCiAgZGVsZXRlOgogICAgZW5hYmxlZDogJHtSRUdJU1RSWV9ERUxFVEVfRU5BQkxFRDotdHJ1ZX0KICBjYWNoZToKICAgIGJsb2JkZXNjcmlwdG9yOiBpbm1lbW9yeQogIHJlZGlyZWN0OgogICAgZGlzYWJsZTogJFJFRElSRUNUX0RJU0FCTEUKICBtYWludGVuYW5jZToKICAgIHVwbG9hZHB1cmdpbmc6CiAgICAgIGVuYWJsZWQ6IHRydWUKICAgICAgYWdlOiAxNjhoCiAgICAgIGludGVydmFsOiAyNGgKICAgICAgZHJ5cnVuOiBmYWxzZQpodHRwOgogIGFkZHI6ICI6JHtQT1JUOi01MDAwfSIKICBzZWNyZXQ6ICQocSAiJFNFQ1JFVCIpCiAgcmVsYXRpdmV1cmxzOiB0cnVlCiAgaGVhZGVyczoKICAgIFgtQ29udGVudC1UeXBlLU9wdGlvbnM6IFtub3NuaWZmXQphdXRoOgogIGh0cGFzc3dkOgogICAgcmVhbG06ICQocSAiJHtSRUdJU1RSWV9BVVRIX1JFQUxNOi1SZWdpc3RyeX0iKQogICAgcGF0aDogL2V0Yy9kaXN0cmlidXRpb24vYXV0aC9odHBhc3N3ZApZQU1MCgojIERyb3Agb3VyIG93biBSRUdJU1RSWV8qIGlucHV0cyBzbyB0aGUgcmVnaXN0cnkgZG9lcyBub3QgcmVhZCB0aGVtIGFzIGNvbmZpZyBvdmVycmlkZXMuCnVuc2V0IFJFR0lTVFJZX1VTRVJOQU1FIFJFR0lTVFJZX1BBU1NXT1JEIFJFR0lTVFJZX1JFRElSRUNUIFJFR0lTVFJZX0RBVEFfRElSIFJFR0lTVFJZX0RFTEVURV9FTkFCTEVEIFwKICBSRUdJU1RSWV9MT0dfTEVWRUwgUkVHSVNUUllfQVVUSF9SRUFMTSBSRUdJU1RSWV9IVFRQX1NFQ1JFVCBQQVNTV09SRCBTRUNSRVQgUzNfU0VDUkVUX0FDQ0VTU19LRVkKbG9nICJTdGFydGluZyByZWdpc3RyeSBmb3IgdXNlciAkVVNFUk5BTUUgb24gcG9ydCAke1BPUlQ6LTUwMDB9IgpleGVjIHJlZ2lzdHJ5IHNlcnZlIC9ldGMvZGlzdHJpYnV0aW9uL2NvbmZpZy55bWwK | base64 -d > /tmp/start.sh && exec sh /tmp/start.sh'`
- **Health check:** /
- **Public domain:** Yes

## Buckets

- **Bucket**

## Documentation

# Deploy and Host Docker Registry on Railway

Docker Registry is the open-source server for storing and distributing container images, built from the CNCF Distribution project. It implements the OCI distribution API that `docker push`, `docker pull`, Podman, Kubernetes and CI tools use. This template runs the official `registry` image, version 3.1.2, as your own private registry.

## About Hosting Docker Registry

Hosting a registry takes a server that speaks HTTPS, durable storage for image layers, and authentication so strangers can't pull or push. This template runs the official image on Railway, which gives it a public HTTPS domain. Images go to a Railway bucket through the registry's S3 driver, so storage has no volume size limit and survives redeploys. On each start, a short start command creates a bcrypt htpasswd file from a generated password and writes the registry config. The registry won't start without a password, so it's never left open. Blob downloads are redirected to short-lived signed bucket URLs.

## Common Use Cases

* Private storage for the images your CI pipeline builds, pulled by servers, Kubernetes clusters or Railway services
* Keeping copies of public base images you depend on, under your own control
* A container registry for a team or homelab without per-seat pricing

## Dependencies for Docker Registry Hosting

* The official `registry` image (CNCF Distribution 3.1.2), pinned by digest
* A Railway bucket (S3-compatible) for image storage

### Deployment Dependencies

* Distribution project: https://github.com/distribution/distribution
* Release 3.1.2: https://github.com/distribution/distribution/releases/tag/v3.1.2
* Official image: https://hub.docker.com/_/registry
* Configuration reference: https://distribution.github.io/distribution/about/configuration/
* S3 storage driver: https://distribution.github.io/distribution/storage-drivers/s3/
* Start script source: https://github.com/aalfath/docker-registry-railway-template

### Implementation Details

After the deploy, the login is `REGISTRY_USERNAME` (default `admin`) and the generated `REGISTRY_PASSWORD`, both in the Registry service's variables. Log in and push:

```sh
docker login YOUR-DOMAIN.up.railway.app -u admin
docker tag alpine:3 YOUR-DOMAIN.up.railway.app/tools/alpine:3
docker push YOUR-DOMAIN.up.railway.app/tools/alpine:3
```

Anonymous pulls and pushes are refused. Deleting manifests through the API is enabled. To free the space they used, run `registry garbage-collect /etc/distribution/config.yml` from a shell on the service (`railway ssh`) at a time when nothing is being pushed. Unfinished uploads are purged after 7 days. Set `REGISTRY_REDIRECT=false` if your clients can't reach the bucket host, and the registry will stream layers itself. To change the password, edit `REGISTRY_PASSWORD` and redeploy.

## Why Deploy Docker Registry on Railway?


Railway is a singular platform to deploy your infrastructure stack. Railway will host your infrastructure so you don't have to deal with configuration, while allowing you to vertically and horizontally scale it.

By deploying Docker Registry on Railway, you are one step closer to supporting a complete full-stack application with minimal burden. Host your servers, databases, AI agents, and more on Railway.



## Similar templates

- [RustFS | (Just Updated) S3 Object Store, Public URL and Keys Set](https://railway.com/deploy/rustfs-or-just-updated-s3-object-store-p) — S3-compatible object store, keys and public URL preset, volume kept
- [TimescaleDB](https://railway.com/deploy/timescaledb-railway-template) — A PostgreSQL-based time-series database for analytics on Railway.
- [Neo4j 2026.10 Community](https://railway.com/deploy/neo4j-202610-community) — Neo4j graph database with APOC, Browser, Bolt TCP proxy and a volume

Open this page in a browser: https://railway.com/deploy/docker-registry-1
