Sign inSign up

esailors/aws-ecr-http-proxy

By esailors

•Updated over 1 year ago

A nginx based pull/push through proxy for AWS ECR with support of cache and token refresh

Image
2

500K+

esailors/aws-ecr-http-proxy repository overview

⁠ ⁠ ⁠

⁠aws-ecr-http-proxy

A very simple nginx push/pull proxy that forwards requests to AWS ECR and caches the responses locally.

⁠Configuration:

The proxy is packaged in a docker container and can be configured with following environment variables:

Environment VariableDescriptionStatusDefault
AWS_REGIONAWS Region for AWS ECRRequired
AWS_ACCESS_KEY_IDAWS Account Access Key IDOptional
AWS_SECRET_ACCESS_KEYAWS Account Secret Access KeyOptional
AWS_USE_EC2_ROLE_FOR_AUTHSet this to true if we do want to use aws roles for authentication instead of providing the secret and access keys explicitlyOptional
UPSTREAMURL for AWS ECRRequired
RESOLVERDNS server to be used by proxyRequired
PORTPort on which proxy listensRequired
CACHE_MAX_SIZEMaximum size for cache volumeOptional75g
CACHE_KEYCache key used for the content by nginxOptional$uri
ENABLE_SSLUsed to enable SSL/TLS for proxyOptionalfalse
REGISTRY_HTTP_TLS_KEYPath to TLS key in the containerRequired with TLS
REGISTRY_HTTP_TLS_CERTIFICATEPath to TLS cert in the containerRequired with TLS
⁠Example:
docker run -d --name docker-registry-proxy --net=host \
  -v /registry/local-storage/cache:/cache \
  -v /registry/certificate.pem:/opt/ssl/certificate.pem \
  -v /registry/key.pem:/opt/ssl/key.pem \
  -e PORT=5000 \
  -e RESOLVER=8.8.8.8 \
  -e UPSTREAM=https://XXXXXXXXXX.dkr.ecr.eu-central-1.amazonaws.com \
  -e AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} \
  -e AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} \
  -e AWS_REGION=${AWS_DEFAULT_REGION} \
  -e CACHE_MAX_SIZE=100g \
  -e ENABLE_SSL=true \
  -e REGISTRY_HTTP_TLS_KEY=/opt/ssl/key.pem \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/opt/ssl/certificate.pem \
  esailors/aws-ecr-http-proxy:latest

If you ran this command on "registry-proxy.example.com" you can now get your images using docker pull registry-proxy.example.com:5000/repo/image.

⁠Deploying the proxy

Modify the ansible role variables⁠ according to your need and run the playbook as follow:

ansible-playbook -i hosts playbook-docker-registry-proxy.yaml

In case you want to enable SSL/TLS please replace the SSL certificates with the valid ones in roles/docker-registry-proxy/files/*.pem⁠

⁠Note on SSL/TLS

The proxy is using HTTP (plain text) as default protocol for now. So in order to avoid docker client complaining either:

  • (Recommended) Enable SSL/TLS using ENABLE_SSL configuration. For that you will have to mount your valid certificate/key in the container and pass the paths using REGISTRY_HTTP_TLS_* variables.
  • Mark the registry host as insecure in your client deamon config⁠.

Tag summary

Content type

Image

Digest

sha256:ed9edd180…

Size

70.4 MB

Last updated

over 1 year ago

docker pull esailors/aws-ecr-http-proxy