Docker container auto-updater · free · open source · one 10 MB binary
Your containers update themselves. Safely.
freshdock pulls new images on your schedule and only keeps them if the healthcheck passes. If not, the old container is back in seconds. A maintained successor to Watchtower.
homelab ~ freshdock checkv1.5.0
$ freshdock check
- traefiktraefik:v3.1live up to date
- nextcloudnextcloud:29nightly updated 04:00, healthy
- jellyfinjellyfin/jellyfin:10.9nightly rolled back, healthcheck failed
- postgrespostgres:16watch update available (16.4)
- gluetunqmcgaw/gluetun:v3weekly up to date
- vaultwardenvaultwarden/server:1.32nightly up to date
Broken updates roll back
A new image only stays if its healthcheck passes. Otherwise the previous container is restored and you get a message.Opt-in by default
Nothing is touched until you label it. New labels start in watch mode: notify, never restart.Understands Compose
A project updates as one unit. Migrations run first, services follow in depends_on order.Drop-in for Watchtower
Reads your existing Watchtower labels. Works on Docker Engine 29, which Watchtower does not.Set it up in a minute
1
Label a container
docker-compose.yml
labels:
- "freshdock.enable=true"
- "freshdock.mode=nightly"2
Run freshdock next to it
shell
$docker run -d --name freshdock \
$ -v /var/run/docker.sock:/var/run/docker.sock \
$ ghcr.io/turbootzz/freshdock run3
Sleep
It checks at 04:00. Good images stay, bad ones are rolled back. Discord, Telegram, webhook or mail tells you what happened.
One mode per container
Your proxy can be live while the database is monthly. Set it with one label. Scheduling docs
live
Update on every new digest.
nightly · weekly · monthly
On a schedule, 04:00 by default. Or any cron.
watch
Notify only. Never restarts. The default.
off
Leave this one alone.
Coming from Watchtower? Keep your labels.
Watchtower was archived in December 2025. Swap the container, everything else stays. Full comparison or the migration guide.
| Capability | Watchtower | freshdock |
|---|---|---|
| Failed update | Container stays down | Rolled back automatically |
| Docker Engine 29+ | Not supported (API 1.25) | Supported, API negotiated |
| Default behaviour | Updates everything | Opt-in, notify first |
| Image size | ~100 MB | Under 10 MB |
| Maintained | Archived | Yes |
Install
Docker
amd64, arm64, armv7
Cargo
From crates.io
Read-only first: freshdock check changes nothing. Full install guide