{"id":13795782,"url":"https://github.com/onfido/ecr-mirror","last_synced_at":"2026-02-15T17:50:14.832Z","repository":{"id":43270851,"uuid":"292103651","full_name":"onfido/ecr-mirror","owner":"onfido","description":"Mirror public repositories to internal ECR repos","archived":false,"fork":false,"pushed_at":"2023-10-18T03:23:01.000Z","size":107,"stargazers_count":75,"open_issues_count":4,"forks_count":15,"subscribers_count":6,"default_branch":"master","last_synced_at":"2024-11-18T10:34:42.304Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":false,"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/onfido.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}},"created_at":"2020-09-01T20:44:22.000Z","updated_at":"2024-11-14T12:45:57.000Z","dependencies_parsed_at":"2023-01-31T03:15:22.489Z","dependency_job_id":null,"html_url":"https://github.com/onfido/ecr-mirror","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/onfido%2Fecr-mirror","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/onfido%2Fecr-mirror/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/onfido%2Fecr-mirror/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/onfido%2Fecr-mirror/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/onfido","download_url":"https://codeload.github.com/onfido/ecr-mirror/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253841158,"owners_count":21972604,"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":[],"created_at":"2024-08-03T23:01:02.089Z","updated_at":"2026-02-15T17:50:14.775Z","avatar_url":"https://github.com/onfido.png","language":"Python","funding_links":[],"categories":["Kubernetes"],"sub_categories":["Kubernetes // Image Registries and Image Distribution"],"readme":"# Docker ECR Mirror\n\n![](https://img.shields.io/pypi/v/ecr-mirror.svg)\n![](https://img.shields.io/pypi/l/ecr-mirror.svg)\n![](https://img.shields.io/pypi/pyversions/ecr-mirror.svg)\n\nMirror public docker images to ECR, automagically. This requires [Skopeo](https://github.com/containers/skopeo) to be installed.\n\n`pip install ecr-mirror`\n\n## Usage\n\n```\n$ ecr-mirror\nUsage: ecr-mirror [OPTIONS] COMMAND [ARGS]...\n\nOptions:\n  --registry-id TEXT    The registry ID. This is usually your AWS account ID.\n  --role-arn TEXT       Assume a specific role to push to AWS\n  --override-os TEXT    Specify the OS of images, default to \"linux\"\n  --override-arch TEXT  Specify the ARCH of images, default to \"amd64\". If set\n                        to \"all\" - all architectures will be synced\n\n  --help                Show this message and exit.\n\nCommands:\n  copy        Copy all tags that match a given glob expression into ECR\n  list-repos  List all repositories that will be synced\n  sync        Copy public images to ECR using ECR tags\n```\n\nCreate an ECR repository with the following two tags set:\n\n* `upstream-image` set to a public Docker hub image, i.e `nginx` or `istio/proxyv2`\n* `upstream-tags` set to a `/`-separated list of tag **globs**, i.e `1.6.*` or just `1.2-alpine`. ECR does not allow the\n  use of the `*` character in tag values, so you should use `+` as a replacement.\n* `ignore-tags` set to a `/`-separated list of tag **globs** to ignore. ECR does not allow the\n  use of the `*` character in tag values, so you should use `+` as a replacement.\n\nTerraform example:\n\n```hcl\nresource \"aws_ecr_repository\" \"repo\" {\n  name = \"nginx\"\n  tags = {\n    upstream-image = \"nginx\",\n    // Mirror 1.16* and 1.17*\n    upstream-tags = \"1.16+/1.17+\"\n    ignore-tags = \"+-gpu\"\n  }\n}\n```\n\nRunning `ecr-mirror sync` will begin concurrently fetching all images and pushing them to ECR.\n\nYou can run `ecr-mirror list-repos` to see all repositories that will be mirrored.\n\nYou can also manually copy specific image patterns using `ecr-mirror copy`:\n\n`ecr-mirror copy \"istio/proxyv2:1.6.*\" ACCOUNT_ID.dkr.ecr.eu-west-1.amazonaws.com/istio-proxyv2`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fonfido%2Fecr-mirror","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fonfido%2Fecr-mirror","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fonfido%2Fecr-mirror/lists"}