From 8004acfae98976379d6687a9f2ea55476b2d041b Mon Sep 17 00:00:00 2001 From: Harmen Date: Tue, 25 Aug 2026 18:13:57 +0200 Subject: [PATCH] pull_policy: never, anders faalt de installatie op een image die nergens staat MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- Docs/Referenties/Umbrel-appstore-spec.md | 15 +++++++++++++++ whatsnext-evolu-relay/docker-compose.yml | 12 ++++++++++++ 2 files changed, 27 insertions(+) diff --git a/Docs/Referenties/Umbrel-appstore-spec.md b/Docs/Referenties/Umbrel-appstore-spec.md index 4676d7a..139b9a1 100644 --- a/Docs/Referenties/Umbrel-appstore-spec.md +++ b/Docs/Referenties/Umbrel-appstore-spec.md @@ -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 diff --git a/whatsnext-evolu-relay/docker-compose.yml b/whatsnext-evolu-relay/docker-compose.yml index f95a1b4..a75a4e3 100644 --- a/whatsnext-evolu-relay/docker-compose.yml +++ b/whatsnext-evolu-relay/docker-compose.yml @@ -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: