quickstart
One container, a volume, and at least one upstream.
start stashito
yaml
# docker-compose.yml
services:
stashito:
image: rcm7/stashito
environment:
PORT: "8080"
STORAGE_PATH: "/data/stashito"
LOG_LEVEL: "info"
LOG_FORMAT: "text"
TAG_TTL: "60s"
UPSTREAM_DOCKERHUB_HOST: "registry-1.docker.io"
volumes:
- stashito_data:/data/stashito
ports:
- "8080:8080"
volumes:
stashito_data:Or as a single command:
sh
docker run -d --name stashito -p 8080:8080 \
-v stashito_data:/data/stashito \
-e PORT=8080 -e STORAGE_PATH=/data/stashito \
-e LOG_LEVEL=info -e LOG_FORMAT=text -e TAG_TTL=60s \
-e UPSTREAM_DOCKERHUB_HOST=registry-1.docker.io \
rcm7/stashitoAll variables are required unless marked optional in configuration — if something is missing or mistyped, Stashito tells you at startup instead of guessing.
pull through it
sh
docker pull localhost:8080/dockerhub/library/postgres:16The first path segment names an upstream you configured: dockerhub is the lowercased <ALIAS> from UPSTREAM_DOCKERHUB_HOST. Everything after it is the ordinary image path on that upstream.
verify
sh
curl -f http://localhost:8080/healthzReturns status, configured upstreams, storage_path and storage_writable as JSON; 503 when degraded. Then pull the same image twice: the first pull is a miss (fetched and cached), the second is served from cache.