Quickstart
Get freshdock watching a container in about a minute. No config file is required: freshdock is driven by container labels and environment variables, notifications included.
1. Install
Pick one (full options in the README):
cargo install freshdock # from crates.io
# or
docker pull ghcr.io/turbootzz/freshdock:latest # container image
2. See what freshdock would do (read-only)
Label a container to opt it in, then run check, which never changes anything:
services:
web:
image: nginx:1.27
labels:
- "freshdock.enable=true" # opt in; mode defaults to watch
freshdock check
You get a table of opted-in containers and whether each has an update available. The CLI reference explains what the status cells mean.
3. Run the daemon
freshdock is opt-in and defaults enabled containers to watch (notice updates, never
restart). Start the scheduler:
docker run -d \
--name freshdock \
--restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
ghcr.io/turbootzz/freshdock:latest run
This is the minimal-watch.yml
example. A read-only socket is enough for watch.
To avoid labelling every container, FRESHDOCK_WATCH_ALL=true includes them all unless
they opt out. See watching every container.
4. Let it update something
Switch a container to an updating mode and give the daemon a writable socket:
labels:
- "freshdock.enable=true"
- "freshdock.mode=nightly" # check at 04:00 daily; recreate if newer
- "freshdock.notify=true" # if you've configured a notifier
Updates are health-gated with automatic rollback: a broken new image is reverted, not left running.
Next steps
- Configuration reference: every label, setting, and env var.
- Scheduling: modes and cron syntax.
- Notifications: webhook, Discord, Telegram, SMTP.
- Registry authentication: private images.
- Deployment: systemd, socket permissions, compatibility.
- Troubleshooting: start here when something misbehaves.
- Coming from Watchtower?