pull_policy: never, anders faalt de installatie op een image die nergens staat

De image is gebouwd op de Umbrel en staat alleen in de lokale Docker-opslag: er
is geen register. Dat leek te werken omdat `docker compose up` niets ophaalt zolang
de image lokaal bestaat. Bij het nakijken van app-script in umbreld bleek dat niet
het pad dat een installatie loopt.

umbreld draait `compose "${app}" pull` bij install, bij update en bij
post-patch-update. Die zou whatsnext/evolu-relay:c03a204 op Docker Hub zoeken,
waar hij niet bestaat, en dan faalt de installatie voordat er iets gestart is. Met
pull_policy: never slaat compose die twee services over bij het ophalen. Postgres
houdt de standaard, want die komt wél uit een register.

Bijkomend voordeel dat het houdt zodra er ooit een register is: ontbreekt de image,
dan is de fout "niet gevonden" en die wijst naar de overgeslagen bouwstap, in plaats
van een mislukte netwerkpoging die naar het register wijst.

Uit hetzelfde bestand meegenomen naar de naslag: starten gaat met
`up --detach --build`, dus umbreld zou een build:-blok wél uitvoeren. Toch blijft
bouwen-in-de-app een slecht idee, en nu met een tweede reden naast de whitelist: de
installatie hangt dan tijdens het bouwen. Op deze machine duurde dat 50 seconden.

Geen versieverhoging: deze app is nog nooit geïnstalleerd, dus er is geen manifest
op een apparaat om tegen te vergelijken.

Tests: 32 goed 0 fout, 54 goed 0 fout en 39 goed 0 fout, niets overgeslagen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Harmen
2026-08-25 18:13:57 +02:00
co-authored by Claude Opus 5
parent b2e9c8fc7a
commit 8004acfae9
2 changed files with 27 additions and 0 deletions
+15
View File
@@ -225,6 +225,21 @@ Alles daarbuiten wordt bij een update **niet** ververst. Een gewijzigde `entrypo
`web/index.html` bereikt een bestaande installatie dus nooit; de gebruiker ziet zijn oude versie en er is
geen foutmelding. Alleen een verwijdering en herinstallatie brengt het over.
### Wat `app-script` met de images doet, en waarom dat een lokale tag breekt
Nagetrokken op 25-08-2026 in hetzelfde `app-script`, toen Evolu Relay een image kreeg die alleen lokaal
bestaat. Twee regels daaruit bepalen wat er met een image gebeurt:
- **bij `install`, bij `update` en bij `post-patch-update` draait `compose "${app}" pull`.** Een tag die
niet in een register staat, laat de installatie dus falen vóórdat er iets gestart is. De uitweg is
`pull_policy: never` op die service: dan slaat compose hem over bij het ophalen en gebruikt wat er
lokaal staat. Dat is precies wat `whatsnext-evolu-relay` doet, en de reden staat er in commentaar bij;
- **starten gaat met `compose "${app}" up --detach --build`.** Dat `--build` is het vermelden waard, want
het betekent dat umbreld een `build:`-blok in een compose wél zou uitvoeren. Toch is bouwen-in-de-app
hier geen goed idee: een `Dockerfile` staat niet in de update-whitelist hierboven, dus een nieuwe versie
vraagt een deïnstallatie, en de installatie hangt tijdens het bouwen. Het recept hoort daarom in
`tools/` in de repo en het resultaat in de Docker-opslag of in een register.
**Gevolg voor het ontwerp.** Zet logica die je later nog wilt kunnen wijzigen op een van deze plekken:
1. **in `docker-compose.yml` zelf**, bijvoorbeeld als een inline `command:`-blok. De compose staat in de
+12
View File
@@ -34,6 +34,16 @@ services:
# op zolang de image lokaal bestaat; zodra de tag naar een register wijst,
# hoort de digest erbij. Zie Docs/Referenties/Images-pinnen.md.
image: whatsnext/evolu-relay:c03a204
# Verplicht zolang de tag niet in een register staat. umbreld draait bij een
# installatie en bij een update `docker compose pull` (zie `app-script` in
# umbreld), en dat zou deze tag op Docker Hub zoeken, waar hij niet bestaat.
# De installatie faalt dan voordat er iets gestart is. `never` slaat hem over
# bij het ophalen en gebruikt wat er lokaal staat.
#
# Bijkomend voordeel: staat de image er niet, dan is de fout "image niet
# gevonden" in plaats van een mislukte netwerkpoging, en dat wijst naar de
# bouwstap die overgeslagen is. Weg zodra er een register is.
pull_policy: never
restart: on-failure
depends_on:
db:
@@ -62,6 +72,8 @@ services:
quota-manager:
image: whatsnext/evolu-relay:c03a204
# Zelfde reden als bij relay hierboven.
pull_policy: never
restart: on-failure
depends_on:
db: