Portainer

Leaving every home lab container running 24/7 is a quiet tax on power bills, fan noise, and the room the mini PC lives in. Stock Docker has no scheduler of its own, so the moment we want a container up only from 7pm to midnight, or an rclone job at 3am, we reach for a helper. This list covers the best apps for scheduling Docker containers on desktop and small-server hosts in 2026, focused specifically on start, stop, and cron-run duties on Windows, macOS, and Linux. We stayed with tools that are actively maintained, work with plain docker-compose, and (with one exception) cost nothing to run at home.

What to look for in a Docker scheduler

A good scheduler does one small thing well. Before picking, check these five points.

Quick comparison

App Best for Runs as License Cost
Ofelia Docker-native cron by labels Container MIT Free
Chadburn Ofelia fork with live label reload Container MIT Free
systemd + Compose Zero extra dependencies on Linux Host service LGPL Free
Cronicle Web UI for scheduled shell and Docker jobs Container MIT Free
Portainer + SleeperStack Full container GUI plus scheduled start/stop Container Zlib / MIT Free (CE)
Kestra Multi-step workflows that trigger containers Container Apache 2.0 Free (OSS)

The apps

1. Ofelia, best overall docker-native scheduler

Ofelia is the tool most self-hosters land on once they outgrow host cron. It runs as a single container, reads schedules from labels on the containers it should act on, and supports four job types: job-exec (run a command inside a running container), job-run (spin up a temporary container, run, exit), job-local (run on the Ofelia host), and job-service-run (Swarm). Combine job-run with the docker CLI image and Ofelia becomes a start/stop scheduler, cron-triggering docker start mycontainer at 7pm and docker stop mycontainer at midnight. Schedules use standard cron plus Quartz seconds and @every shortcuts, and every run streams to docker logs.

Where it falls short: Development on the upstream mcuadros/ofelia repository has slowed since 2024, which is what drove the Chadburn fork. Label changes still require a restart of the Ofelia container to pick up new jobs, and there is no first-party web UI.

Pricing:

Platforms: Linux, macOS, Windows (via Docker Desktop). The container itself is linux/amd64 and linux/arm64.

Download: Project site · GitHub

Bottom line: Pick Ofelia if the stacks it schedules rarely change and you want the smallest possible surface area.

2. Chadburn, best actively maintained free option

Chadburn is a community fork of Ofelia (by way of rdelcorro/ofelia) that fixes the two paper cuts most people hit on the original. It watches Docker events, so starting, stopping, or relabeling a container updates its schedule without a Chadburn restart. It also drops the requirement that Chadburn itself have a dummy job just to keep running. Config sources are additive: an INI file and container labels merge, which suits teams that keep global jobs in a repo and per-stack jobs in each compose file.

Where it falls short: Smaller community than Ofelia, so fewer blog posts and example configs to lean on. The web UI is minimal (a status page) rather than a full dashboard.

Pricing:

Platforms: Linux, macOS, Windows (via Docker Desktop). Same multi-arch images as Ofelia.

Download: Project site · GitHub

Bottom line: The default choice for anyone starting fresh in 2026, since it inherits Ofelia’s design without the stale-issue tracker.

3. Systemd timers with Docker Compose, best zero-extra-container approach

On any Linux host, systemd already ships with the scheduler most homelabbers need. A pair of files, stack.service (with ExecStart=docker compose up -d and ExecStop=docker compose down) plus stack.timer (with OnCalendar=Mon..Fri 19:00), turns an entire compose stack into something the OS starts and stops on a schedule. Because systemd is running anyway, there is nothing new to install, monitor, or update. Logs flow into journalctl -u stack.service, which most admins already read for other reasons.

Where it falls short: Linux only. There is no equivalent on Windows or macOS beyond scheduled tasks or launchd, both of which are clumsier for containers. Managing more than a dozen timers by hand gets tedious; a config-file scheduler beats it past that scale.

Pricing:

Platforms: Linux only.

Download: Project site · Docker Compose docs

Bottom line: The right answer when the host is Linux, the schedule is simple, and adding another container feels like ceremony.

4. Cronicle, best web UI for scheduled jobs

Cronicle is a multi-server task scheduler with a browser UI, retry policies, and real-time log tailing. It is not Docker-specific, which is exactly the point: jobs are shell commands, so docker start, docker stop, docker compose restart, or docker run --rm alpine sh -c '...' all work as first-class scheduled actions. The dashboard shows next-run times, live output, and a run history that survives restarts, which makes 3am failures easy to reconstruct in the morning.

Where it falls short: No label-based configuration. Every schedule lives in Cronicle’s UI or config file, so drift between the scheduler and the compose repo is on you to prevent. The default single-server setup uses local filesystem storage, which is fine for a homelab and awkward for a cluster.

Pricing:

Platforms: Linux, macOS, Windows (via Docker Desktop or Node.js).

Download: Project site · GitHub

Bottom line: Best pick when someone other than the sysadmin needs to see whether last night’s job ran.

5. Portainer with SleeperStack, best if the GUI already exists

Portainer Community Edition is the web dashboard most self-hosters already have installed for start, stop, restart, log tailing, and stack editing across Docker, Swarm, and Kubernetes. It does not schedule container lifecycle events on its own. Pairing it with SleeperStack, a small companion container that reads Portainer labels and issues start or stop calls on a schedule, fills the one gap and keeps the point-and-click workflow. Portainer Business adds Edge Compute for offline sites (first five nodes free), but that is unrelated to the local scheduling job.

Where it falls short: Two moving parts instead of one. If Portainer or the Docker socket restarts, SleeperStack has to reconnect cleanly; test that once before trusting it with an overnight window.

Pricing:

Platforms: Linux, macOS, Windows (Docker Desktop). Portainer supports arm64 for Raspberry Pi hosts.

Download: Project site · GitHub

Bottom line: The pragmatic choice for households where more than one person needs to see and control the containers.

6. Kestra, best power-user workflow orchestrator

Kestra is a full workflow engine that speaks YAML, and one of its first-class task types is io.kestra.plugin.docker.Run. That means a scheduled Kestra flow can start a container, wait for exit, capture the logs, branch on the result, and then start something else. For a household with a media stack, an rclone backup, a Home Assistant snapshot, and a nightly Restic prune, the orchestration is often more valuable than the schedule itself. Kestra is free and open-source under Apache 2.0, with a paid Pro tier at $25 per month for worker groups and RBAC that most homelabs will not need.

Where it falls short: Kestra is a workflow engine first and a scheduler second. It expects Postgres (or an embedded H2 for testing), and its memory footprint (roughly 512MB warm) is an order of magnitude above Ofelia’s. Overkill for a single cron-style container.

Pricing:

Platforms: Linux, macOS, Windows (Docker Desktop). Requires Postgres in production.

Download: Project site · GitHub

Bottom line: Pick Kestra when the scheduling problem is really a workflow problem in disguise.

Tools people confuse with schedulers, and what they actually do

Four names come up in every homelab thread on this topic but do not belong on the list above.

Any of the five pair well with Ofelia or Chadburn: use Dockge to write the stack, add Ofelia labels, let Watchtower keep the images fresh.

How to pick the right one

If the host is a Linux mini PC and the schedule is one or two stacks going up in the evening and down at bedtime, use systemd timers. There is nothing to install, nothing to update, and one systemctl status call answers every debugging question.

If more than one container needs a schedule, or the schedules should live next to the compose files in a git repo, run Chadburn. Ofelia is fine if you already have it working; there is no reason to switch just for switching’s sake, but new deployments in 2026 should start with the fork.

If the person on call for a broken 3am job is not the sysadmin, install Cronicle. The web UI, run history, and retry policies are worth the extra container.

If the household already lives in Portainer and nobody wants a second UI, add SleeperStack and keep the workflow intact. If the “schedule” is really “run three things in a specific order and email me if step two fails,” reach for Kestra. And if the goal is really just to keep container images fresh, that is Watchtower or Diun, not any tool on the list above.

FAQ

What is the best free Docker container scheduler?

For most people, Chadburn is the best free choice in 2026. It is MIT-licensed, runs as a single container, reads schedules from Docker labels next to the containers they act on, and picks up label changes without a restart. Ofelia is the same design and equally free; Chadburn is the actively maintained fork.

Can Docker schedule containers to start and stop automatically?

Not by itself. Docker’s built-in restart policy only decides what to do after a container exits; it has no time-of-day logic. To start and stop containers on a schedule, pair Docker with a scheduler like Ofelia, Chadburn, Cronicle, or systemd timers.

Does Portainer have a built-in container scheduler?

No. Portainer Community Edition and Business Edition both offer manual start, stop, and restart controls plus one-shot execution of stacks, but neither has a cron-style scheduler. To add scheduling, pair Portainer with SleeperStack or run Ofelia or Chadburn alongside it.

Is Watchtower a container scheduler?

No. Watchtower watches Docker registries for new image tags and updates running containers when one appears. It has no cron syntax and cannot start or stop a container on a time-of-day schedule. Use it in addition to a scheduler like Ofelia, not as a replacement.

How do you save power on a home lab Docker host?

The two biggest wins are shutting down containers you only need for a few hours a day (media stacks, dev environments, backup targets) and letting the host itself sleep between scheduled windows. A scheduler like Chadburn or a pair of systemd timers handles the first; wake-on-LAN plus a systemctl suspend timer handles the second.

Do these tools work on Windows and macOS?

Yes. Ofelia, Chadburn, Cronicle, Portainer, Dockge, and Kestra all ship as Linux containers that run happily on Docker Desktop for Windows and macOS. The one exception is systemd, which is Linux only; on Windows, Task Scheduler with docker compose commands is the closest equivalent, and on macOS, launchd plays the same role.