NAME
A Silent Watchtower Replacement
DATE
TAGS
If you host your own services, you’ve probably used Watchtower at some point to keep your Docker containers up to date. It was the gold standard for a long time.
But recently, the original Watchtower project got archived. And worse, when Docker updated their Go SDK in v29 to enforce correct API versions, Watchtower essentially broke.
I looked around for alternatives, but almost everything out there felt messy. Modern solutions seem obsessed with notifications like Slack, Discord, Email, Telegram, you name it. Personally, I absolutely hate that. I don’t want my homelab pinging my phone every time a minor patch is released. I just want a tool that updates my containers and leaves me alone.
So, I built orbitd
orbitd is a lightweight, set-and-forget container update daemon for Docker and Docker Swarm.
It does exactly what you need: monitors your containers and automatically updates them when new images are available, while preserving all your networks, volumes, and labels. If an update fails, it automatically rolls back to the previous container.
No notifications. No noise. Just silent, automatic updates.
Fine-Grained Version Control
One feature I really wanted was the ability to be a bit smarter about what gets updated. Blindly pulling latest can sometimes break things if a major version drops.
So, I added a semver policy engine. You can tell orbitd exactly how aggressive you want it to be.
By default, it uses a digest policy (same tag, new build). But you can easily change it via labels to only allow patch or minor updates:
services:
api:
image: myapi:1.0.0
labels:
# This will update to 1.9.0, but will ignore 2.0.0
- 'orbitd.policy=minor'
How it works
It is designed to be zero-configuration. If you just want everything updated securely in the background, you can drop this into your compose file:
services:
orbitd:
image: ghcr.io/mizuchilabs/orbitd:latest
container_name: orbitd
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
That’s it. By default, it checks every 12 hours, updates what needs updating, and cleans up the old images.
If you prefer to manually opt-in specific containers, you can set ORBITD_REQUIRE_LABEL=true and then just add orbitd.enable=true to the services you want monitored. It also runs perfectly on Docker Swarm if you deploy it to a manager node.
If you’re tired of noisy homelab tools and just want your containers to stay updated quietly in the background, check it out.