1- # Diun Web Updater
1+ # DockPull
22
33A small, self-hosted, mobile-first web UI for updating Docker containers that
44are managed by ` docker compose ` (e.g. via [ Dockge] ( https://github.com/louislam/dockge ) ).
@@ -106,9 +106,9 @@ existing compose file (e.g. a `management` stack) and fill in the two secrets.
106106
107107``` yaml
108108services :
109- diun-updater :
109+ dockpull :
110110 image : ghcr.io/strandedturtle/diupdater:edge
111- container_name : diun-updater
111+ container_name : dockpull
112112 restart : unless-stopped
113113 ports :
114114 - " 5000:5000"
@@ -122,16 +122,16 @@ services:
122122 # match STACKS_DIR above, or updates fail with "compose file not found"
123123 # and relative bind mounts in your other stacks break on recreate.
124124 - /opt/stacks:/opt/stacks
125- - diun-updater -data:/data
125+ - dockpull -data:/data
126126
127127volumes :
128- diun-updater -data :
128+ dockpull -data :
129129` ` `
130130
131131Generate the secret (` openssl rand -hex 32`), then start just this service:
132132
133133` ` ` bash
134- docker compose up -d diun-updater
134+ docker compose up -d dockpull
135135` ` `
136136
137137Then open `http://<host-ip>:5000`.
@@ -199,7 +199,7 @@ critical part is the **same-path stacks mount**:
199199 - /var/run/docker.sock:/var/run/docker.sock
200200 # ⚠️ SAME PATH on host and in container — do not change one side only:
201201 - ${STACKS_DIR}:${STACKS_DIR}
202- - diun-updater -data:/data # persistent SQLite (events/history/pins)
202+ - dockpull -data:/data # persistent SQLite (events/history/pins)
203203` ` `
204204
205205**Why same-path?** This app calls `docker compose` against the *host* Docker
@@ -226,10 +226,10 @@ Check it's healthy:
226226
227227` ` ` bash
228228curl -s http://localhost:5000/api/health # -> {"ok":true}
229- docker logs diun-updater # -> "...server listening at ..."
229+ docker logs dockpull # -> "...server listening at ..."
230230` ` `
231231
232- The SQLite database is created automatically in the `diun-updater -data` volume
232+ The SQLite database is created automatically in the `dockpull -data` volume
233233on first start. The first time you load the UI you'll get the login screen —
234234enter `ADMIN_PASSWORD`, and the dashboard will run an initial update check.
235235
@@ -298,17 +298,17 @@ under `errors`).
298298
299299# ## Background checks & Discord notifications
300300
301- By default the server also checks on a schedule (every 6h ) so badges stay fresh
301+ By default the server runs a daily scan (09:00, server-local time ) so badges stay fresh
302302even when the app is closed. Configure it under **Settings → Background checks &
303303Discord** :
304304
305- - **Background checks ** on/off and interval .
305+ - **Daily scan ** on/off and the time of day it runs .
306306- **Discord webhook URL** — paste a Discord channel webhook to get a message when
307307 updates are found, then use **Send test message** to verify it. Each update is
308308 announced once (no repeats on every check).
309309
310310These can also be seeded from the environment (`BACKGROUND_CHECK_ENABLED`,
311- ` CHECK_INTERVAL_HOURS ` , `DISCORD_WEBHOOK_URL`); the Settings UI overrides at
311+ ` SCHEDULED_CHECK_TIME ` , `DISCORD_WEBHOOK_URL`); the Settings UI overrides at
312312runtime.
313313
314314---
@@ -328,9 +328,9 @@ All configuration is via environment variables (see `.env.example`).
328328| `SESSION_TTL` | `604800` | | Login cookie lifetime in seconds (7 days). |
329329| `BASE_URL` | `http://localhost:5000` | | Public URL; if `https`, the cookie is set `Secure`. |
330330| `DISCORD_WEBHOOK_URL` | — | | Discord webhook for update notifications (optional; also set in Settings). |
331- | `CHECK_INTERVAL_HOURS ` | `6 ` | | Background check interval in hours (1–168) . |
331+ | `SCHEDULED_CHECK_TIME ` | `09:00 ` | | Daily local time (HH:MM) for the scheduled scan . |
332332| `BACKGROUND_CHECK_ENABLED` | `true` | | Whether the scheduled background check runs. |
333- | `SELF_CONTAINER_NAME` | `diun-updater ` | | This app's own container name, excluded from the dashboard so it can't update itself. |
333+ | `SELF_CONTAINER_NAME` | `dockpull ` | | This app's own container name, excluded from the dashboard so it can't update itself. |
334334
335335The two required vars are enforced at startup — the server refuses to boot
336336without them (a `SKIP_CONFIG_CHECK=1` escape hatch exists for skeleton
@@ -354,7 +354,7 @@ smoke-tests only; never use it in production).
354354 open internet or fronting it with Cloudflare Access if exposure matters.
355355- **The app excludes its own container** from the dashboard (it can't safely
356356 update itself). Update the updater the normal way :
357- ` docker compose pull diun-updater && docker compose up -d diun-updater ` .
357+ ` docker compose pull dockpull && docker compose up -d dockpull ` .
358358
359359---
360360
@@ -381,7 +381,7 @@ quay.io work.
381381pending event automatically (this also covers multi-arch images, where the
382382registry digest and the running digest legitimately differ). If a badge sticks,
383383tap **Check for updates** again; if it persists, there may be a genuinely newer
384- image — check the History tab and `docker logs diun-updater `.
384+ image — check the History tab and `docker logs dockpull `.
385385
386386**Can't log in / cookie not sticking.** If you're on `https`, make sure
387387` BASE_URL` is your `https://` URL (otherwise the `Secure` cookie won't be set
@@ -430,5 +430,5 @@ cd client && npm run build # production bundle -> client/dist/
430430Build the production image manually (build context must be the repo root) :
431431
432432` ` ` bash
433- docker build -f server/Dockerfile -t diun-updater .
433+ docker build -f server/Dockerfile -t dockpull .
434434` ` `
0 commit comments