#23: record the other half of the image-tag trap
A pinned IMAGE_TAG solves 'latest never re-pulls' and introduces the mirror problem: the pin is an instruction to run that exact image, so deploying without bumping it re-pulls the old build and reports success. Redeploying with 'ignore cache' does not help - that clears the build cache, and nothing is built on the server. Documents the two-step release and the asset-fingerprint check that tells you which image is actually serving, rather than trusting a green deployment log. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
084b1bc204
commit
3b6e95ed6c
1 file changed
+26
@@ -201,6 +201,32 @@ The tags are published by `release.yml`; `docker buildx imagetools inspect
|
|||||||
ghcr.io/<owner>/lambdamail/webmail:latest` shows what `latest` currently points
|
ghcr.io/<owner>/lambdamail/webmail:latest` shows what `latest` currently points
|
||||||
at.
|
at.
|
||||||
|
|
||||||
|
**Pinning has a second edge: bump it on every release.** A pinned tag is an
|
||||||
|
instruction to run *that* image, so a deploy triggered without changing it
|
||||||
|
re-pulls the same old build and succeeds — the UI simply does not change.
|
||||||
|
Redeploying with "ignore cache" does not help, because that clears the *build*
|
||||||
|
cache and nothing here is built on the server; the tag being requested is still
|
||||||
|
the old one. The two failure modes are mirror images: `latest` never updates
|
||||||
|
because Docker already has it, and a stale pin never updates because you asked
|
||||||
|
for it by name.
|
||||||
|
|
||||||
|
So a release is two steps, not one:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. point the tag at the new commit
|
||||||
|
IMAGE_TAG=sha-$(git rev-parse HEAD)
|
||||||
|
# 2. then deploy
|
||||||
|
```
|
||||||
|
|
||||||
|
Confirm which one is actually serving before believing a green deployment:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -s https://<WEBMAIL_HOST>/user/login | grep -o '/_next/static/css/[a-z0-9]*\.css'
|
||||||
|
```
|
||||||
|
|
||||||
|
The asset fingerprint changes with every build. If it did not move, the old
|
||||||
|
image is still running whatever the deployment log said.
|
||||||
|
|
||||||
## Troubleshooting
|
## Troubleshooting
|
||||||
|
|
||||||
**The web UI is up but nothing can log in.** The auth service refuses to start
|
**The web UI is up but nothing can log in.** The auth service refuses to start
|
||||||
|
|||||||
Reference in new issue
Block a user