Features13 Updates

New images overnight, and back again if they break.

Cleaning up by itself has been there for a while, and so have automatic backups. Updating belongs in that list, but with more care: a cleanup removes what nobody uses and a backup changes nothing, while a new image can genuinely break. So the app pulls, recreates, waits to see it come back — and puts the old image back if it does not.

Screenshot: The dashboard after a round: what was updated, from which version to which, and how long it took.

Fig. — The dashboard after a round: what was updated, from which version to which, and how long it took.

What you can do

Per project, not everything at once

Turn it on for a compose project or a single container, at a time you pick. There is no "update everything" switch: the database on your home server and an image you built yourself do not want the same treatment.

A moment, not an interval

Four in the morning by default. A backup may drift with whenever the app was on; an update should not walk an hour later every day until it happens at noon.

A missed night, caught up once

A laptop that was off at four updates when it wakes up. Off for a week? It updates once, not seven times.

Back to the version that worked

The old image id is remembered before the pull and the image is kept. If the container does not come back within five minutes — or has a health check that never turns healthy — the old id goes back on the name and it is recreated.

One at a time, and it stops

After the first rollback the round ends. If tonight’s pull takes down half your containers, you want the app to stop rather than finish the list.

An edited compose file is left alone

Changed the file since those services were made? Recreating would roll out those changes too, and that is a decision you make awake.

One notification in the morning

"2 updated, 1 rolled back" — not one per container. Waking up to five notifications only teaches you to dismiss them.

Try it while you watch

Update now walks exactly the same path, rollback included, so you can see it work before you trust it overnight.

Running is not the same as working

A health check goes through starting before it turns healthy.

That difference is what the app waits for. A container that is briefly gone counts as waiting, not broken — compose may be recreating it. Unhealthy is broken, and waiting longer will not help.

The whole story afterwards

From which image id to which, and how long it took.

The round stays on the dashboard for a day, with a rolled-back line standing out in red, and every step also lands on the Events page. Not only that a container stopped and started, but that the app did it, and why.

All features

Try it on your own daemon.
Free and open source. Windows installer, or npx on any platform.
Download for Windows
$ npx docker-client-mx