r/docker 9d ago

Mod Approved A year ago I shared DockerWakeUp, a lazy-loading proxy for your homelab. It just got its biggest update yet

Hi all,

About a year ago I posted about DockerWakeUp, a small open-source tool I built for my homelab that automatically starts Docker containers when someone accesses them, and shuts them down again after they've been idle for a while. The idea: run 20 services, use the RAM/CPU cost of 5, and never SSH/Portainer in to start something because a friend wants to look at photos.

I just finished the biggest update since then, so I wanted to share it again.

The headline feature: a live startup page. Before, if you hit a sleeping service you got a "starting up, try again in a few seconds" message and had to refresh manually. Now your browser instantly gets a proper status page that streams the container's actual docker compose logs live as it boots, shows a progress bar with a "usually ready in ~40s" estimate learned from previous startups, and reloads into the app the moment it's ready. Watching Immich or Jellyfin boot in real time in your browser is weirdly satisfying. You can also drop in your own custom HTML page instead (there's a template in the repo), or hide logs for services where they shouldn't be public.

Game servers actually work now. The proxy was HTTP-only before, so "wake on connect" for Minecraft was wishful thinking. There's now a raw TCP mode: a player connecting to the server wakes it, the proxy holds the connection while it boots, and pipes them through when the port opens. Active players keep it marked as in-use so idle shutdown won't pull the rug out mid-session.

Other new stuff:

  • Start/stop hooks — run your own commands before a service starts and after it stops (mount a NAS share first, back up a game world after shutdown, ping a Discord webhook, whatever)
  • Non-Docker services — the hooks can fully replace docker compose, so anything with a start command and a port can participate
  • Easier install — DockerWakeUp itself now runs as a container: docker compose up -d --build and you're done (systemd setup script still there if you prefer)
  • Update notifications — it checks GitHub daily and tells you when your copy is behind
  • A pile of bug fixes — including a nasty one where a WebSocket reconnecting to a sleeping service (looking at you, Portainer tabs) could take down the whole proxy

I'm using it for self-hosted apps like Immich that friends and family use occasionally, game servers that only need to exist when someone's playing, and dashboards/utilities I touch once a week.

Repo: https://github.com/jelliott2021/DockerWakeUp

Quick Demo: https://imgur.com/a/qBWzkTH

Feedback, ideas, and contributors very welcome — a lot of this update came from inconviences with my own setup, so I'd love to hear what inconviences you hit on your homelabs

AI disclosure: I used AI assistance (Claude) for parts of this update — bug hunting, testing, and implementing some features. I'm a full time software engineer and every change was reviewed, tested on my own homelab, and shipped by me.

58 Upvotes

23 comments sorted by

10

u/mbu147 9d ago

wow, great work… I’ve already set up a configuration using the Caddy Docker proxy - can I use that instead of Nginx? My containers already have (sub)domains. Is there a way to set this up using Docker labels, for example?

5

u/_Jelliott_ 9d ago

Can definitely look at integrating this! If you add an issue to the github repo can send updates and attach the commit its added in

1

u/mbu147 9d ago

awesome, I created a issue for it.

2

u/_Jelliott_ 8d ago

Just finished a new branch https://github.com/jelliott2021/DockerWakeUp/tree/Caddy-Support that adds Cloudflare, Traefik, and Caddy support. Currently usable just running more tests and migration from older versions before merging to main

1

u/Scotty1928 9d ago

I would also be interested in this very thing

1

u/Digital_Voodoo 9d ago

Same here

1

u/ElYeetoDorito 9d ago

me three! this is so cool OP!

1

u/Medium_Antelope_7037 3d ago

same question tbh, labels would make this way easier to manage if you already have a proxy setup going

3

u/Not_Undefined 9d ago

What's the difference between this and Sablier? https://github.com/SablierApp/sablier

5

u/_Jelliott_ 9d ago

Great question get this a lot, same idea, different approach. Sablier plugs into your existing reverse proxy and wakes individual containers by label. DockerWakeUp is more of an all-in-one for a single homelab box, you point it at your compose folders and it does the rest:

  • Whole-stack aware — wakes and sleeps your entire compose stack (app + database + cache) together, no labels or healthchecks needed
  • Game servers — Minecraft and other TCP services wake when a player connects (Sablier is HTTP only)
  • Live startup page — shows the container logs while it boots, with a "usually ready in ~40s" estimate, then auto-reloads
  • Hooks — run your own commands before start / after stop (mount a drive, back up a world, ping Discord), or even manage non-Docker services
  • Generates your proxy config — one config file and it writes the NGINX or Caddy setup for you
  • Easy to hack on — it's a small TypeScript project, so if you can code at all you can bend it to do whatever you want. The hooks alone open up a lot, but the source is simple enough to extend directly

Sablier has more setup involved — a proxy plugin, labels on every container, and healthchecks. DockerWakeUp is a lot simpler to get going: one config file, one script, and you're done.

1

u/Not_Undefined 8d ago

That's interesting set of features, thanks for that. Well done!

2

u/git-age-checker 9d ago

🛠️ GitHub Repository Insights

1

u/corelabjoe 9d ago

Just out of curiosity, would this paired with zram be a superpowered combo you think?

2

u/_Jelliott_ 9d ago

Yeah I think both together are a great idea to minimize usage for idle containers. One minimizing resources when containers are still on, and the DockerWakeUp stopping old containers to reclaim all usage on resources after a while

1

u/CORUSC4TE 8d ago

RemindMe! 1 hour

1

u/RemindMeBot 8d ago

I will be messaging you in 1 hour on 2026-08-24 11:46:04 UTC to remind you of this link

CLICK THIS LINK to send a PM to also be reminded and to reduce spam.

Parent commenter can delete this message to hide from others.

RemindMeBot is switching to username summons. Instead of !RemindMe 1 day, use u/RemindMeBot 1 day. More info.


Info Custom Your Reminders Feedback

1

u/InfaSyn 8d ago

What is the use case for this unless you have biblically small amount of ram?

Would surely also defeat the point for anything like a plex stack, frigate, grafana etc

Are the wait times for something like paperless or immich tier in size not excruciating?

2

u/_Jelliott_ 8d ago

Fair points! For always on stuff like Plex or Frigate you should definitely turn off the idle shutdown per app (if you want everything in dockerwakeup or just don’t include), they stay running and only get wake on request (nice after a reboot). Nothing gets killed while running background tasks.

It’s more for stuff you rarely open like Paperless, Stirling PDF, admin panels, or if you’re a dev with a bunch of test sites and side projects. I also host things for friends and this way everything’s reachable without everything running. Basically scale to zero like Netlify but self hosted.

Wake times aren’t bad either since it’s a container start, not an image pull. Immich took ~5s for me (and almost unnoticeable on the ios app) and that’s a heavy one, small apps are 1-2s.

1

u/xX__M_E_K__Xx 8d ago

Sablier user here.        

I'm using sablier with Traefik.        

Could you please have DWU create a config file for traefik too ?      

2

u/_Jelliott_ 8d ago

Just finished a new branch https://github.com/jelliott2021/DockerWakeUp/tree/Caddy-Support that adds Cloudflare, Traefik, and Caddy support. Will be in main soon!

1

u/maximus459 8d ago

Cool app, but bad idea to publicize container logs. Docker logs can contain sensitive information, depending on the application:

  • passwords or API keys,
  • database connection strings
  • JWT/session tokens
  • email addresses or usernames
  • internal IPs, hostnames and filesystem paths
  • HTTP request headers or other user data

1

u/_Jelliott_ 8d ago

Yes this is very important to remember. Logs are an optional config per service. I’d only recommend turning it on if you know what the logs will display. Or what I do for example is have Cloudflare tunnels with verification needed before accessing my sites