Skip to content

Install

Install freshdock

Pick the route that fits your setup. All three give you the same single binary. There’s no agent, no database, no runtime to install alongside it.

01

From crates.io

If you have a Rust toolchain, this builds and installs the latest release straight from crates.io ↗.

crates.io
$cargo install freshdock
02

Container image (Recommended)

The recommended route for a homelab. Multi-arch (amd64, arm64, armv7) on GHCR ↗. A read-only socket is enough for watch; give it a writable socket once you switch a container to an updating mode.

docker run
$docker run -d --name freshdock --restart unless-stopped \
$  -v /var/run/docker.sock:/var/run/docker.sock \
$  ghcr.io/turbootzz/freshdock:latest run
docker-compose.yml
# minimal-watch.yml: opt in, notify only
services:
  freshdock:
    image: ghcr.io/turbootzz/freshdock:latest
    command: ["run"]
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    restart: unless-stopped
03

Prebuilt binary or from source

Static-musl binaries for amd64 / arm64 / armv7 are attached to every GitHub release ↗. Download, chmod +x, drop it on your PATH. Or build it yourself:

from source
$git clone https://github.com/Turbootzz/freshdock
$cd freshdock
$just build   # binary at target/release/freshdock

First run

Look before you leap.

freshdock is opt-in and starts every enabled container in watch. Label a container with freshdock.enable=true, then run the read-only status check. It never pulls, stops, or recreates anything:

read-only
$freshdock check

Happy with what it shows? Switch a container to freshdock.mode=nightly and start the daemon. The full walkthrough is in the quickstart ↗; socket permissions, systemd, and compatibility live in the deployment guide ↗.