{"id":42148148,"url":"https://github.com/peter-mount/docker-mirror","last_synced_at":"2026-01-26T18:01:06.836Z","repository":{"id":85760293,"uuid":"308975913","full_name":"peter-mount/docker-mirror","owner":"peter-mount","description":"A utility to mirror multiarch docker images between repositories","archived":false,"fork":false,"pushed_at":"2022-01-23T18:39:55.000Z","size":9,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-12-06T21:38:15.402Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/peter-mount.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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":"2020-10-31T21:35:31.000Z","updated_at":"2022-01-23T18:39:58.000Z","dependencies_parsed_at":"2023-05-04T17:46:22.101Z","dependency_job_id":null,"html_url":"https://github.com/peter-mount/docker-mirror","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/peter-mount/docker-mirror","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peter-mount%2Fdocker-mirror","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peter-mount%2Fdocker-mirror/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peter-mount%2Fdocker-mirror/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peter-mount%2Fdocker-mirror/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/peter-mount","download_url":"https://codeload.github.com/peter-mount/docker-mirror/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peter-mount%2Fdocker-mirror/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28784093,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-26T13:55:28.044Z","status":"ssl_error","status_checked_at":"2026-01-26T13:55:26.068Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":[],"created_at":"2026-01-26T18:00:30.440Z","updated_at":"2026-01-26T18:01:06.812Z","avatar_url":"https://github.com/peter-mount.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# docker-mirror\n\nThis is a small utility to mirror docker images between repositories.\n\nPlease note this is beta quality so it might work for you or not. So far it works but will probably require more testing.\n\nPrebuilt binaries will come at a future date.\n\n## Prerequisites\n\nBecause this utility uses the [docker manifest](https://docs.docker.com/engine/reference/commandline/manifest/) command\nyou need to enable experimental features to the Docker CLI.\n  \n## Mirroring a repository\n\nSimply compile this utility then:\n\n    docker-mirror -d docker.example.com hello-world\n\nHere we set the mirror repository as docker.example.com and ask it to mirror the hello-world image.\n\nAs long as you have permissions to upload to `docker.example.com` then it will pull down every image for all architectures and then push them to the new repository.\n\nYou can then access that image with:\n\n    docker run -it --rm docker.example.com/library/hello-world\n\nNote: the `library/` prefix is there because the `hello-world` image is in reality `library/hello-world`.\nIf you had another image, say `area51/jenkins` then you could mirror it with:\n\n    docker-mirror -d docker.example.com area51/jenkins\n\nand then pull it from your local repository as:\n\n    docker pull docker.example.com/area51/jenkins\n\n### Adding a prefix in the local repository\n\nAs my local Nexus3 repository has non-public images I prefer to keep the mirrored images with a mirror/ prefix.\n\nThis is simple to implement. Using the above examples:\n\n    docker-mirror -d docker.example.com/mirror hello-world area51/jenkins\n\nThen those two images are accessible in the local repository as `docker.example.com/mirror/library/hello-world` \u0026 `docker.example.com/mirror/area51/jenkins`\n\n## Why this utility exists\n\nOn November 2 2020 Docker started enforcing a pull rate limit on the number of images you can pull from the main\ncentral repository.\n\nAt the time of writing this limit was:\n* 100 container image pulls every 6 hours for unauthenticated users\n* 200  container image pulls every 6 hours for authenticated users\n\nFor most developers this isn't a problem but for serious developers who have CI builds running on multiple machines and\nmultiple platforms it's potentially an issue - depending on how many builds you are using it's possible that you will\nhit this limit and have builds randomly failing.\n\nWhat this utility does is it allows you to pull an image from the central repository and push it to a local one.\nI already use [Sonatype Nexus 3](https://www.sonatype.com/nexus/repository-oss) locally for docker, Java/Maven, NodeJS\n\u0026 APT repositories so it was a no-brainer to use it as the local mirror.\n\n## Doesn't docker already support a local mirror\n\nYes it does, however it doesn't work. Nexus3 can support proxying the central repository,\nhowever a bug with docker [#30880](https://github.com/moby/moby/issues/30880) causes it to fail for [non-root users](https://github.com/moby/moby/issues/30880#issuecomment-670150369).\n\n## Isn't this just a pull, tag \u0026 push?\n\nYes \u0026 for simple images that would work. For example, you could mirror an image with:\n\n    docker pull golang:alpine\n    docker tag golang:alpine docker.example.org/golang:alpine\n    docker push docker.example.org/golang:alpine\n\nThe downside is that would only push the image for the platform you run the commands on.\nSo if you had that image for both amd64 \u0026 arm architectures then those commands would only push amd64 if that was the\nplatform you run them under. \n\nWhat this utility does is it works with the manifests and would ensure that all platforms are mirrored.\n\nNote: The utility deliberately limits the images mirrored with those who's OS = 'linux'.\nI did this deliberately as I found that for hello-world it refused to pull the image with Windows as the os.\nI also don't have a Windows instance so I cannot test against that Operating system.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpeter-mount%2Fdocker-mirror","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpeter-mount%2Fdocker-mirror","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpeter-mount%2Fdocker-mirror/lists"}