Skip to content
Back to main site

Amazon ECR

Manage private repository records, layer uploads and image manifests through the ECR API.

Plan: Pro58 of 58 operations implemented

Docker login, push and pull weren't verified. The returned repository and layer URLs aren't the shared API endpoint.

Example checked on Vera 1.2.2, 8 November 2026. Each coverage note names its own evidence and date.

Activate your license key and start the emulator with the Vera launcher, as in Activate Pro, then run this in a terminal of its own, from an empty scratch directory. It gives the official AWS CLI dummy credentials and a config file of its own, so no AWS account is needed and your own AWS profile isn't touched.

Terminal window
export VERA_ENDPOINT="http://localhost:5003"
export AWS_ACCESS_KEY_ID=test AWS_SECRET_ACCESS_KEY=test
export AWS_REGION=us-east-1 AWS_DEFAULT_REGION=us-east-1
export AWS_SHARED_CREDENTIALS_FILE=/dev/null
export AWS_EC2_METADATA_DISABLED=true
export AWS_PAGER="" AWS_CLI_AUTO_PROMPT=off
unset AWS_PROFILE AWS_DEFAULT_PROFILE
unset AWS_SESSION_TOKEN AWS_SECURITY_TOKEN
unset AWS_WEB_IDENTITY_TOKEN_FILE AWS_ROLE_ARN AWS_ROLE_SESSION_NAME
unset AWS_CONTAINER_CREDENTIALS_FULL_URI
unset AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
cat > vera-aws-config <<'EOF'
[default]
region = us-east-1
output = json
cli_binary_format = base64
s3 =
addressing_style = path
EOF
export AWS_CONFIG_FILE="$PWD/vera-aws-config"

When you've finished every example in this terminal, close it and delete vera-aws-config, not before.

Use the AWS CLI’s ecr commands. The emulator serves the 2015-09-21 API over the AWS JSON protocol, and the examples use us-east-1.

A repository URI looks like AWS’s, such as 123456789012.dkr.ecr.us-east-1.amazonaws.com/vera-docs-private, and a layer’s download URL starts with https://ecr.local/. They name things in the emulator: they aren’t its endpoint, so keep sending requests to $VERA_ENDPOINT. Pointing Docker at them wasn’t tested.

Create a private repository:

Terminal window
aws --endpoint-url "$VERA_ENDPOINT" ecr create-repository --repository-name vera-docs-private

These are selected fields from the output. The account is the one configured on your instance:

Output (selected fields)
{
"repository": {
"repositoryArn": "arn:aws:ecr:us-east-1:123456789012:repository/vera-docs-private",
"registryId": "123456789012",
"repositoryName": "vera-docs-private",
"repositoryUri": "123456789012.dkr.ecr.us-east-1.amazonaws.com/vera-docs-private"
}
}

Read the repository back and list its images:

Terminal window
aws --endpoint-url "$VERA_ENDPOINT" ecr describe-repositories --repository-names vera-docs-private
aws --endpoint-url "$VERA_ENDPOINT" ecr list-images --repository-name vera-docs-private

To clean up, delete the repository. --force deletes it along with any images in it:

Terminal window
aws --endpoint-url "$VERA_ENDPOINT" ecr delete-repository --repository-name vera-docs-private --force
  • Private repositories: create, describe, list images and delete with --force.
  • Layer uploads. In a separate check, InitiateLayerUpload, a one-part UploadLayerPart and CompleteLayerUpload with the layer’s SHA-256 digest stored a layer, and BatchCheckLayerAvailability reported it AVAILABLE.
  • Image manifests: a manifest was put with PutImage, described, fetched with BatchGetImage and deleted with BatchDeleteImage.
  • Layer download URLs. Once a manifest referenced the uploaded layer, GetDownloadUrlForLayer returned a URL beginning https://ecr.local/123456789012/. The URL wasn’t fetched. As on AWS, asking for a layer no image references yet answers LayerInaccessibleException.
  • Image scan records: StartImageScan and DescribeImageScanFindings, with the limits below.
  • Listed in the earlier implementation inventory; not rechecked since: lifecycle policies and previews, pull-through cache rules, replication, repository creation templates, registry and repository policies, scanning and signing configuration, tag mutability, authorization tokens and tags.

The main limits are below. A few more apply to every service, and the API coverage notes cover smaller differences.

  • Docker use wasn’t verified. Docker login, push and pull weren’t tried, and no repository URI or layer download URL was contacted. The layer and manifest calls stored metadata, and no image was run from them.
  • Don’t rely on image scans. A started scan was COMPLETE at once, with empty findings. No vulnerability scanner was validated, so a scan’s status and findings say nothing about the image.
  • Upload limits weren’t tested. Only a small one-part layer was uploaded, so part sizes and corrupted uploads weren’t checked.

Every operation in AWS's published 2015-09-21 API (SDK model, botocore 1.43.105), and whether the emulator implements it. Availability combines the earlier implementation inventory with the dated observations below; checking a page's example does not verify every operation. Each note names its evidence first; an observation given without a build or date comes from earlier testing, on 3 November 2026. What the statuses mean

OperationStatusNotes
BatchCheckLayerAvailabilityImplementedLocal observation: Vera 1.2.0 preview, 5 November 2026 — reported the uploaded layer AVAILABLE.
BatchDeleteImageImplementedLocal observation: Vera 1.2.0 preview, 5 November 2026 — deleted the stored manifest.
BatchGetImageImplementedLocal observation: Vera 1.2.0 preview, 5 November 2026 — fetched the stored manifest.
BatchGetRepositoryScanningConfigurationImplemented
CompleteLayerUploadImplementedLocal observation: Vera 1.2.0 preview, 5 November 2026 — completed the upload with the layer's SHA-256 digest.
CreatePullThroughCacheRuleImplemented
CreateRepositoryImplementedLocal observation: Vera 1.2.0 preview, 5 November 2026 — created the example's repository, with a repository URI on dkr.ecr.us-east-1.amazonaws.com that names it but isn't the emulator's endpoint.
CreateRepositoryCreationTemplateImplemented
DeleteLifecyclePolicyImplemented
DeletePullThroughCacheRuleImplemented
DeleteRegistryPolicyImplemented
DeleteRepositoryImplementedLocal observation: Vera 1.2.0 preview, 5 November 2026 — deleted the example's repository with --force.
DeleteRepositoryCreationTemplateImplemented
DeleteRepositoryPolicyImplemented
DeleteSigningConfigurationImplemented
DeregisterPullTimeUpdateExclusionImplemented
DescribeImageReplicationStatusImplemented
DescribeImageScanFindingsImplementedLocal observation: Vera 1.2.0 preview, 5 November 2026 — returned a COMPLETE scan with empty findings straight away. No vulnerability scanner was validated.
DescribeImageSigningStatusImplemented
DescribeImagesImplementedLocal observation: Vera 1.2.0 preview, 5 November 2026 — described the stored manifest.
DescribePullThroughCacheRulesImplemented
DescribeRegistryImplemented
DescribeRepositoriesImplementedLocal observation: Vera 1.2.0 preview, 5 November 2026 — described the example's repository.
DescribeRepositoryCreationTemplatesImplemented
GetAccountSettingImplemented
GetAuthorizationTokenImplemented
GetDownloadUrlForLayerImplementedLocal observation: Vera 1.2.0 preview, 5 November 2026 — once a manifest referenced the uploaded layer, returned a URL beginning https://ecr.local/123456789012/. The URL wasn't fetched, so downloading a layer and pulling an image weren't verified. Before an image referenced the layer, it answered LayerInaccessibleException, as AWS does.
GetLifecyclePolicyImplemented
GetLifecyclePolicyPreviewImplemented
GetRegistryPolicyImplemented
GetRegistryScanningConfigurationImplemented
GetRepositoryPolicyImplemented
GetSigningConfigurationImplemented
InitiateLayerUploadImplementedLocal observation: Vera 1.2.0 preview, 5 November 2026 — started a layer upload.
ListImageReferrersImplemented
ListImagesImplementedLocal observation: Vera 1.2.0 preview, 5 November 2026 — listed the example repository's images.
ListPullTimeUpdateExclusionsImplemented
ListTagsForResourceImplemented
PutAccountSettingImplemented
PutImageImplementedLocal observation: Vera 1.2.0 preview, 5 November 2026 — stored an image manifest. No image was run from it.
PutImageScanningConfigurationImplemented
PutImageTagMutabilityImplemented
PutLifecyclePolicyImplemented
PutRegistryPolicyImplemented
PutRegistryScanningConfigurationImplemented
PutReplicationConfigurationImplemented
PutSigningConfigurationImplemented
RegisterPullTimeUpdateExclusionImplemented
SetRepositoryPolicyImplemented
StartImageScanImplementedLocal observation: Vera 1.2.0 preview, 5 November 2026 — the scan was COMPLETE at once. No vulnerability scanner was validated.
StartLifecyclePolicyPreviewImplemented
TagResourceImplemented
UntagResourceImplemented
UpdateImageStorageClassImplemented
UpdatePullThroughCacheRuleImplemented
UpdateRepositoryCreationTemplateImplemented
UploadLayerPartImplementedLocal observation: Vera 1.2.0 preview, 5 November 2026 — uploaded a small layer's bytes as one part. Part sizes and corrupted uploads weren't checked.
ValidatePullThroughCacheRuleImplemented