{"id":20255510,"url":"https://github.com/tedkulp/my-private-registry","last_synced_at":"2025-04-11T00:06:08.636Z","repository":{"id":66391286,"uuid":"83800020","full_name":"tedkulp/my-private-registry","owner":"tedkulp","description":"Docker registry v2 rewritten in Node","archived":false,"fork":false,"pushed_at":"2021-11-21T19:01:26.000Z","size":394,"stargazers_count":9,"open_issues_count":7,"forks_count":0,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-04-11T00:06:01.312Z","etag":null,"topics":["docker","docker-registry","node"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tedkulp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-03-03T13:19:00.000Z","updated_at":"2018-03-16T02:56:00.000Z","dependencies_parsed_at":null,"dependency_job_id":"b1d2698f-4a16-453f-a767-99e15c360f9c","html_url":"https://github.com/tedkulp/my-private-registry","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tedkulp%2Fmy-private-registry","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tedkulp%2Fmy-private-registry/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tedkulp%2Fmy-private-registry/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tedkulp%2Fmy-private-registry/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tedkulp","download_url":"https://codeload.github.com/tedkulp/my-private-registry/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248317707,"owners_count":21083528,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","docker-registry","node"],"created_at":"2024-11-14T10:39:02.605Z","updated_at":"2025-04-11T00:06:08.628Z","avatar_url":"https://github.com/tedkulp.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"## My Private Registry\n\nA locally stored Docker registry that doesn't make you want to\npull out your hair.\n\n### Why?\n\n_**Doesn't the official registry already work just fine?**_ In theory, yes.\nBut it has issues. The docker registry in it's current form has a two\npriority use cases:\n\n* Never remove anything\n* Store images in the cloud\n\nHowever, there are those of us who do not have that luxury. Whether it's\nregulatory or bandwidth, it's very possible that you need to store your\ndocker images on a server somewhere in the office. If that's the case,\nthen you'll find the official registry somewhat lacking. Deletion and\ngarbage collection were introduced WAY late, and even then, there are\nserious bugs in the FS driver that haven't been resolved for months.\n\nBecause docker is SO important to my current employer and because I spent\nso much time fighting with being able to clean up the docker registry, I\ndeicded to write my own instead.\n\n### Features\n\n* Fast\n* Easy to understand storage model\n* Manifest v2 Compliant (should work with v1, but not tested)\n* Built-in web app to get manifest details\n* Manifest deletion and garbage collection that really work\n* Supports HTTPS for direct serving, or HTTP if behind a proxy\n* Tested in a production environment\n* Distributed in convenient docker container\n* Example cleanup script (also in production)\n\n### Tradeoffs\n\n* Only works on the local filesystem\n* No authentication\n* Still has a few [issues](https://github.com/tedkulp/my-private-registry/issues)\n\n### Usage\n\n#### Running\n\nTo start it up:\n\n    docker run -d -p 80:3000 --restart=always --name registry tedkulp/my-private-registry\n    \nIf you're storing your data in a directory on your server somewhere:\n\n    docker run -d -p 80:3000 -v /path/to/data:/code/data --restart=always --name registry tedkulp/my-private-registry\n    \n#### Environment Variables\n\n\u003cdl\u003e\n  \u003cdt\u003eREGISTRY_USE_HTTP\u003c/dt\u003e\n  \u003cdd\u003eSet this to true if you want to serve http behind a proxy\u003c/dd\u003e\n\n  \u003cdt\u003eREGISTRY_PORT\u003c/dt\u003e\n  \u003cdd\u003eUse this if you need to change the port from 3000 for some reason. It shouldn't really be necessary in a docker container, though.\u003c/dd\u003e\n\u003c/dl\u003e\n\nMore to come, especially for cert details\n\n#### Garbage Collection\n\nTo clean up any blobs that aren't being referenced, run this command. If you're deleting stuff\nregulary, put it in a cron job.\n\n    docker exec -it registry index.js gc -d /code/data\n\n### Contributing\n\nPlease! Create some issues of stuff I'm missing. Submit a merge request if you can fix it. I'm open to any collaboration.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftedkulp%2Fmy-private-registry","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftedkulp%2Fmy-private-registry","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftedkulp%2Fmy-private-registry/lists"}