One Docksentry, several hosts
Point it at your other machines and it checks, updates, recreates and reports across all of them:
DOCKER_HOSTS=pve1:tcp://pve1:2375, nas:ssh://root@nas
The endpoint is whatever the container CLI takes for its global endpoint flag, so a TCP socket / socket proxy works as well as SSH — and it's the simpler route if you'd rather not maintain keys.
Aim a command at one box with @host, or at everything with @all:
/check @pve1 check just that host
/update sonarr @nas update sonarr over there
/update * @all update everywhere, deliberately
Looking around (/check, /status, /updates) covers every host by default. Anything that changes something stays on the local host unless you say otherwise — and says so in its reply, so the rule is visible without reading the docs. The Web UI gains a Host column.
Marked experimental: it hasn't run on real multi-host hardware yet, only against a second endpoint here. Leave DOCKER_HOSTS unset and nothing changes — no host column, no @ anywhere, same state files, same messages.
Self-update stays local-only, and compose-managed containers on a remote host are recreated from their inspect data rather than through docker compose (the compose file lives on that host, not here).
Podman is now actually tested
There's a Podman test bed in the suite — a real podman, plus a remote Podman service over TCP. It paid for itself immediately: Podman documents --url for remote endpoints and not -H, which is what Docksentry was about to send. It accepts -H as an undocumented alias today, so this would have worked right up until some future Podman quietly dropped it.
Fixed
- Container groups worked only on Docker. The restart-dependents cascade called
dockerby name instead of the CLI you configured, so withCONTAINER_CLI=podmanit invoked a binary that may not exist. Bites anyone on Podman using a group withrestart_dependents. - Every container CLI call is now time-bounded. Calls without an explicit timeout inherited "wait forever", which a dead-but-established connection can trigger — and since Telegram commands are dispatched inline, one such call could stop the bot answering anything at all.
- The Podman docs still claimed there was no Podman-specific code, which stopped being true in v1.61.0.
- Refreshed the Web UI screenshots; they were several versions out of date.