Fender – Docker socket proxy that maps image refs to registries you define

avivklas1 pts1 comments

fender-ci · Actions · GitHub Marketplace · GitHub

Skip to content

Search or jump to...

Search code, repositories, users, issues, pull requests...

-->

Search

Clear

Search syntax tips

Provide feedback

--><br>We read every piece of feedback, and take your input very seriously.

Include my email address so I can be contacted

Cancel

Submit feedback

Saved searches

Use saved searches to filter your results more quickly

-->

Name

Query

To see all available qualifiers, see our documentation.

Cancel

Create saved search

Sign in

Sign up

Appearance settings

Resetting focus

You signed in with another tab or window. Reload to refresh your session.<br>You signed out in another tab or window. Reload to refresh your session.<br>You switched accounts on another tab or window. Reload to refresh your session.

Dismiss alert

{{ message }}

fender-ci<br>Actions

About

Transparent Docker registry proxy. Rewrites unqualified image references to any registry with a single action step.<br>v0.1.2<br>Latest

By fender-proxy

Star0 (0)You must be signed in to star a repositoryUse latest version<br>Choose a version

Tags<br>2 (2)<br>securitycontainer-ci

fender

fender is a transparent Docker Unix socket proxy that frees you from the implicit Docker Hub registry lock-in — without touching Dockerfiles, CI scripts, or CLI habits.

It works by sitting between the Docker CLI and the Docker daemon. On startup it registers itself as a Docker context and activates it, so all Docker tooling routes through fender automatically. When you shut fender down it removes its context and restores whatever you had before.

docker pull nginx:latest # you type this<br>▼ Docker context: "fender" (~/.fender/fender.sock)<br>┌─────────────────────────────────────────────────────────┐<br>│ fender │<br>│ docker.io/library/nginx:latest │<br>│ ↓ rewrite │<br>│ registry.example.com/library/nginx:latest │<br>└─────────────────────────────────────────────────────────┘<br>▼ upstream: active Docker context before fender started<br>Docker Daemon

GitHub Actions

steps:<br>- uses: fender-proxy/fender@v1<br>with:<br>default-registry: registry.example.com

- run: docker pull nginx # → registry.example.com/library/nginx

No DOCKER_HOST export needed — fender registers itself as the active Docker<br>context automatically.

Inputs

Input<br>Description<br>Default

version<br>fender release tag<br>latest

default-registry<br>Registry for unqualified images

registry-map<br>Newline-separated source: target remappings

log-level<br>debug|info|warn|error<br>info

Outputs

Output<br>Description

socket<br>Absolute path to the fender Unix socket

version<br>The fender version that was installed

Example: private registry mirror

- uses: fender-proxy/fender@v1<br>with:<br>registry-map: |<br>docker.io: nexus.corp/dockerhub-proxy<br>ghcr.io: nexus.corp/ghcr-proxy

GitLab CI

include:<br>- component: gitlab.com/fender-proxy/fender/fender@~latest<br>inputs:<br>default-registry: registry.example.com

build:<br>extends: .fender<br>script:<br>- docker pull nginx # → registry.example.com/library/nginx

DOCKER_HOST is automatically set in the job — no manual configuration needed.

Inputs

Input<br>Description<br>Default

version<br>fender release tag<br>latest

default-registry<br>Registry for unqualified images

registry-map<br>Newline-separated source: target remappings

log-level<br>debug|info|warn|error<br>info

Requires Go 1.21+

go install github.com/fender-proxy/fender@latest

Or from source:

git clone https://github.com/fender-proxy/fender<br>cd fender<br>make install # → $GOPATH/bin/fender

Quick start

fender --default-registry registry.example.com

That's it. fender will:

Detect your active Docker context and use its socket as the upstream

Create a "fender" Docker context pointing to its own socket

Set "fender" as the active context

time=… level=INFO msg="fender ready"<br>upstream_source="Docker context \"desktop-linux\""<br>upstream=/Users/you/.docker/run/docker.sock<br>default_registry=registry.example.com<br>context_watching=true

✓ Docker context "fender" is now active — no DOCKER_HOST export needed.

All Docker tooling now routes through fender. No shell exports, no config changes.

docker pull nginx:latest # → registry.example.com/library/nginx:latest<br>docker run ubuntu:22.04 id # → registry.example.com/library/ubuntu:22.04<br>docker pull ghcr.io/org/app # → unchanged (explicit registry)

On shutdown (Ctrl-C or SIGTERM), fender removes the "fender" context and restores your previous context automatically.

Context awareness

fender reads the active Docker context the same way the Docker CLI does:

/meta.json<br>→ platform default (/var/run/docker.sock or ~/.docker/run/docker.sock)">DOCKER_HOST env var<br>→ ~/.docker/config.json (currentContext field)<br>→ ~/.docker/contexts/meta//meta.json<br>→ platform default (/var/run/docker.sock or ~/.docker/run/docker.sock)

It also watches ~/.docker/ with fsnotify. If you switch contexts while fender is running, fender detects the change and updates its upstream socket live — no restart needed.

# fender is running…<br>docker context use my-other-context

# fender logs:<br># level=INFO...

fender docker registry context proxy latest

Related Articles