Simple proxy. Powerful control.
Drevnix is a self-hosted container registry proxy that sits between your Docker clients and upstream registries — ghcr.io, Docker Hub, ECR. Every pull goes through it. No upstream credential ever reaches a developer's machine.
Three-Port Architecture: Proxy, Portal, and API
docker pull :8000 Public-facing Docker Registry V2 endpoint. This is where docker pull goes. HTTP Basic Auth using client credentials.
:8001 Internal only Browser-based admin UI. Manage upstreams, clients, permissions, audit logs, and cache.
:8002 Internal only Programmatic management. Terraform, Ansible, scripts. HTTP Basic Auth with admin credentials.
How the docker registry proxy handles each pull request
HTTP Basic Auth header extracted from the Docker pull request.
bcrypt verification against stored hash. Wrong credentials → 401.
Expired client → 401 Unauthorized. No manual cleanup needed.
Repository path checked against client's permission entries. No match → 403 Forbidden.
AES256-GCM decryption of stored upstream password. In memory only.
Drevnix makes the actual registry request using real credentials.
After successful pull, blob layers are cached to local disk per admission policy.
Pull event written: client, upstream, repo, tag, status, IP, UTC timestamp.
401 Missing / invalid credentials 401 Expired client 403 No matching permission 404 Unknown upstream ID URL Format
Docker image URLs through Drevnix follow this pattern:
docker pull drevnix.company.com/ghcr/myorg/webapp:v1.2.3 Pull from ghcr.io — upstream ID "ghcr" docker pull drevnix.company.com/dockerhub/library/nginx:latest Pull nginx from Docker Hub — upstream ID "dockerhub" docker pull drevnix.company.com/ecr-prod/api-service:stable Pull from AWS ECR — upstream ID "ecr-prod" Docker Client Setup
Log in with a Drevnix scoped client credential, not your upstream registry password. No shared PATs, no raw upstream keys in CI.
# Log in using a Drevnix client identity (not your upstream credentials)
docker login drevnix.company.com -u my-app-id -p my-app-password
# Pull from ghcr.io via Drevnix (upstream ID: "ghcr")
docker pull drevnix.company.com/ghcr/myorg/webapp:v1.2.3
# Pull from Docker Hub via Drevnix (upstream ID: "dockerhub")
docker pull drevnix.company.com/dockerhub/library/nginx:latest
# Pull from ECR via Drevnix (upstream ID: "ecr-prod")
docker pull drevnix.company.com/ecr-prod/api-service:stable In CI (GitHub Actions, GitLab CI, etc.): Store DREVNIX_USER and DREVNIX_PASSWORD as secrets. No upstream credentials (GitHub PAT, ECR keys) ever leave your Drevnix server.