Show HN: Unregistry – “docker push” directly to servers without a registry
Overview
- Tool provides a
docker pussh-style workflow: push images directly over SSH to remote Docker/containerd daemons, only sending missing layers, no permanent registry required. - Many commenters say this fills a long-standing gap in the Docker ecosystem, especially for small setups and on-prem/air-gapped environments.
Compose and deployment workflows
- Several people want a
docker compose pusshequivalent that:- Reads the compose file on the remote host.
- Pushes only the images actually used there.
- Then restarts the compose stack.
- Current alternatives:
- Manually
pussheach image or script it (e.g.,yq | xargs). - Use Docker contexts /
DOCKER_HOST=ssh://...so images are built directly on the remote host viadocker compose build/up.
- Manually
- Debate:
- Building on prod hosts is simple but can be resource-heavy and less “clean”.
- Building once elsewhere and pushing identical artifacts to prod is preferred by some, especially in more formal CI/CD setups.
How it works vs existing tricks
- Traditional pattern:
docker save | ssh | docker load(with or without compression) copies the entire image every time. Many users already rely on this but acknowledge it is inefficient for large images. - Unregistry:
- Starts a temporary container on the remote side, exposing the node’s containerd image store as a standard OCI registry.
- Only missing layers are uploaded; existing layers on the server are reused.
- Can also run standalone and be used with skopeo, crane, BuildKit, etc.
- Comparisons:
- Podman has
podman image scp, which is similar but integrated natively. - Other community tools like docker-pushmi-pullyu and custom reverse-tunnel scripts implement similar flows using the official registry image and SSH tunnels.
- Podman has
Use cases and benefits
- Attractive for:
- Single-VM or small-cluster deployments (Hetzner VPS, homelabs, IoT devices) where running or paying for a registry is overkill.
- On-prem or intermittently connected environments that don’t want internet-facing registries.
- Faster deployment of very large images where only upper layers change.
- Some see it as a good fit for tools like Kamal or Uncloud, potentially removing the registry dependency and enabling “push-to-cluster” semantics.
Concerns, limitations, and extensions
- Requires Docker/containerd on the remote; for now it’s a deployment helper, not a full control plane.
- A few commenters are uneasy about running extra containers on production hosts, though the container is short-lived.
- Disaster recovery and large multi-region clusters are seen as better served by conventional registries; this is viewed more as a targeted, simplicity-first tool.
- Works conceptually with Kubernetes by running unregistry on a node and pulling via its registry endpoint; for full cluster image distribution, tools like Spegel are suggested.
- Image-signing and content-trust integrations are raised as an open question, with some related discussion referencing Docker Content Trust and cosign but no definitive answer for this tool yet.
Naming and ergonomics
- The
pusshpun is widely appreciated but some worry it looks like a typo in CI/CD scripts; the plugin can be renamed to a clearer alias (e.g.,docker pushoverssh) if desired.