v1.7.0-rc.4
Pre-release
Pre-release
v1.7.0-rc.4
Full Changelog: v1.6.1-rc.2...v1.7.0-rc.4
[1.7.0-rc.4] — 2026-08-26
Security
- Base images bumped to clear six HIGH OpenSSL CVEs. The
node:24-alpineandalpine:3.24digest pins are rolled to the current upstream rebuilds, moving the shipped OpenSSL from 3.5.7-r0 (flagged by Grype for CVE-2026-14457, CVE-2026-18798, CVE-2026-54874, CVE-2026-63072, CVE-2026-63075, and CVE-2026-63076) to 3.5.8-r0. (#881) - The demo site sends the full security-header set.
demo.getdrydock.comwas failing the weekly ZAP baseline scan with six WARN-NEW alerts.apps/demo/vercel.jsonnow sendsX-Content-Type-Options,Permissions-Policy, a credentiallessCross-Origin-Embedder-Policy, and a same-originAccess-Control-Allow-Origin; the two cache-control alerts are allowlisted in.zap/rules.tsvunder the same static-SPA rationale as the existing 10049 entry. (#878)
Fixed
- WebSocket log-stream connections behind a TLS-terminating proxy no longer 403 when
X-Forwarded-Protois absent. With trust proxy enabled,isOriginAllowedfell back to the local socket'sencryptedflag whenever the proxy omittedX-Forwarded-Proto, which is plain HTTP on a backend behind TLS termination, so a browser'shttps://Origin never matched and every WebSocket upgrade was rejected while REST traffic worked fine. The protocol is now treated as unknown (and skipped from the comparison) in that case instead of being inferred from the local socket; host validation is unaffected. (#867, #868) - A
ws/wssvalue inX-Forwarded-Protono longer rejects the WebSocket upgrade. Traefik forwards the upgrade's client-facing scheme aswssrather thanhttps(traefik/traefik#6388), which the origin check treated as an unsupported protocol and hard-rejected — so the trust-proxy fix above still 403'd behind a default Traefik setup.wsandwssnow map tohttp:/https:for the Origin comparison; genuinely unknown protocols are still rejected. (#867, #887) - Startup no longer crashes with
EPERMwhen the store volume forbidschmod. The permission tightening added in 1.6.0 now warns and continues onEPERM/EACCES/ENOTSUPinstead of throwing, so mounts that rejectchmod(NFS/CIFS volumes, non-root containers, some volume drivers) no longer take the whole process down at startup; a genuinely read-only volume (EROFS) still fails fast at startup, because nothing could be persisted there anyway. (#874, #886) - Tag suggestion no longer ranks a bare integer build-number tag above a real dotted version. A bare integer tag (e.g.
168) coerces viasemver.coerce()into a fake168.0.0, which previously outranked a real release like1.43.3— forlinuxserver/plex, this meant the suggested-tag badge and, with a permissivedd.tag.includefilter, the actionable update candidate itself could point at a destructive downgrade. Bare integer tags are now only ever ranked among themselves (never against a real dotted version, and never at all when the population contains any other non-integer version signal, such as a prerelease-only or coercion-lossy tag), sorted numerically rather than lexically. The rule is shared between the suggested-tag badge (tag/suggest.ts) and the actionable non-semver/includeTagsrecovery path (watchers/providers/docker/tag-candidates.ts) via a newtag/version-population.tsmodule so the two paths can't drift apart again. (#859, #871) - The debug dump redacted env var names instead of values. Container env vars appear in the dump as
{ key, value }pairs, and the generic redaction walker matched the pair'skeyproperty against thekeysensitive-token rule, so a var likeHF_TOKENshowed up as"key": "[REDACTED]", "value": "xyz"— the name was hidden and the actual secret was left in plain text. Pair objects are now handled explicitly: the name always stays visible, and the value is redacted only when the name itself matches the sensitive-key rules. (#875, #885) - Containers that drop out of watch scope are now pruned from the store and UI. A container excluded by
watchbydefaultbeing off, or by itsdd.watchlabel being removed, previously kept its stale store record forever as long as it still inspected successfully in Docker — inspect success alone was being read as "still tracked" instead of "still in scope," so the only way to clear it was deletingdd.json. Stopped-but-still-watched containers are unaffected and keep their start-button visibility in the UI. (#869, #888)