github amayer1983/docksentry v1.65.1
v1.65.1 — three defects found by mining comparable tools

latest release: v1.66.0
3 hours ago

Three defects, found by reading other people's bug histories rather than waiting for our own.

Watchtower, Diun, WUD, dockcheck and Ouroboros solve the same problem against the same Docker API and the same registry protocols. Their backlogs are our backlog in waiting. Everything below was reproduced here before it was fixed, and two of the three turned up independently in two separate sweeps.

A private registry's credentials could go to a different registry

The config.json lookup matched with registry in key or key in registry. So a container pulled from gcr.io was handed the Basic-Auth header stored for eu.gcr.io, and anything under example.com got the credentials for myregistry.example.com. Measured, not theorised:

before:  gcr.io       → EU-ONLY:SECRET
         example.com  → PRIVATE:PW
after:   gcr.io       → (nothing)
         example.com  → (nothing)

Hostname matching is structural now — scheme and path stripped, comparison exact, Docker Hub's four aliases folded together. That last part also fixes what the substring hack was written for and never achieved: registry-1.docker.io never matched https://index.docker.io/v1/, because neither string contains the other. The one credential nearly everyone has was being silently ignored.

A leftover backup could get promoted over your healthy container

If <name>_old survived an interrupted run, the next update's rename failed, the recreate then failed on the name conflict, and the rollback — which trusts <name>_old to be this run's backup — force-removed the healthy container and started the stale one in its place. You end up running a previous generation of your container with nothing saying so.

The guard already existed on the dependent-recreate path. The main path never had it. A rename that fails now aborts before anything is destroyed.

Compose stacks with an override file silently stopped using compose

Docker joins multiple compose files into one comma-separated label. docker-compose.yml,docker-compose.override.yml failed the file check, so the stack fell through to the standalone docker run recreate — losing compose semantics on exactly the setup the Compose docs recommend. Four containers on my own host were affected.

Each file gets its own -f now, in Docker's recorded order, since compose applies overrides left to right. A path that genuinely contains a comma is left alone: an unresolvable split would deploy from the wrong file, which is worse than the fallback it replaces.

Also

The README's roadmap still listed multi-host management and the interactive Discord bot as "v2.0, ahead" and asked people to star the repo to signal demand — both shipped on 1 August. Anyone comparing Docksentry against another tool read that and concluded it couldn't do what it had been doing for a day.

/favicon.ico is served. The page always declared its icon inline so browser tabs showed it, which is why nobody noticed that bookmark managers and feed readers were getting a 404.

Upgrading is the usual docker pull ghcr.io/amayer1983/docksentry:latest, or nothing at all with auto-selfupdate on.

Don't miss a new docksentry release

NewReleases is sending notifications on new releases.