diff --git a/CHANGELOG.md b/CHANGELOG.md index 575dc7e..038f3ed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ # Changelog +## 2026-07-06 — healthcheck sweep: `localhost` → `127.0.0.1` across all 48 templates + +Escalation of the re-run vaultwarden observation +(`felhom.eu/documentation/audits/RERUN-p1p3-2026-07-06.md`) from an instance to a **class**: 48/53 +templates used `localhost` in their docker healthcheck `test:` line. BusyBox `wget` (and the node / +python / curl one-shot forms, incl. mealie's `socket.create_connection`) resolve `localhost`→IPv6 +`::1` with no cross-address-family fallback, so an IPv4-only-binding app reads docker-`unhealthy` +while fully serving. Mechanical sweep `localhost`→`127.0.0.1`, scoped strictly to the healthcheck +`test:` lines (diff-reviewed: no app env/config/label line changed; `.felhom.yml` files were already +clean). Industry practice — never `localhost` in container healthchecks. New REUSE.md convention row. + ## 2026-07-06 — vaultwarden F1 fix: _ENABLE_SMTP boot-gate (campaign finding, pilot-blocking) The no-mercy campaign (felhom.eu `audits/CAMPAIGN-nomercy-2026-07-06.md`, finding F1) proved that a diff --git a/REUSE.md b/REUSE.md index 79abbc6..9803ae8 100644 --- a/REUSE.md +++ b/REUSE.md @@ -16,6 +16,7 @@ None — this repo is templates/config, not code. See §2/§5. | `.felhom.yml` required fields | `templates/paperless-ngx/.felhom.yml` | All 53 apps: `display_name`, `description` (Hungarian), `category`, `subdomain`, `slug`, `resources{mem_request, mem_limit, pi_compatible, needs_hdd}`, `deploy_fields`, `app_info{tagline, use_cases, first_steps, ...}`, `healthcheck`. Optional: `smtp_mapping` (email-capable apps), `open_path` (non-root landing page, e.g. ghost). | | deploy_fields conventions | `templates/paperless-ngx/.felhom.yml` (`deploy_fields:` block) | Every app starts with `DOMAIN` (type `domain`) + `SUBDOMAIN` (type `subdomain`, `locked_after_deploy: true`). Secrets: `type: secret` + `generate:` — dominant generators `password:24` (DB passwords) and `hex:32` (app secret keys); `password:16` for shown admin passwords (`type: password`). HDD apps add `HDD_PATH` (`type: path`, placeholder `/mnt/felhom-drives/hdd_1`, locked). Labels/descriptions in Hungarian. | | Controller-side health probe | `templates/vaultwarden/.felhom.yml` (`healthcheck:` block) | `healthcheck.checks[]` with `type: http` (port only), `type: api` (port + `path` + `expect.status: 200`), or `type: tcp` (port only — mealie, crafty-controller). Prefer `api` with a real health path when the app has one. | +| Docker healthcheck host | ALL `templates/*/docker-compose.yml` (`healthcheck.test:`) | **Always `127.0.0.1`, never `localhost`.** BusyBox `wget` (and node/python/curl one-shots) resolve `localhost`→IPv6 `::1` with NO cross-address-family fallback; an app that binds IPv4-only then reads docker-`unhealthy` while fully serving (vaultwarden, re-run 2026-07-06 — swept all 48 templates). | | Docker healthcheck — BusyBox/wget images | `templates/vaultwarden/docker-compose.yml` (~L49) | `test: ["CMD", "wget", "--spider", "-q", "http://localhost:/"]`. Most common family (~20 apps, e.g. homebox, glance). | | Docker healthcheck — curl-capable images | `templates/paperless-ngx/docker-compose.yml` (~L76) | `test: ["CMD", "curl", "-f", "http://localhost:/"]` (~18 apps: jellyfin, immich, sonarr…). | | Docker healthcheck — Node images (no wget/curl) | `templates/rallly/docker-compose.yml` (~L49) | `test: ["CMD", "node", "-e", "require('http').get(...)"]` — used when the image lacks wget (that was rallly's actual bug). | diff --git a/templates/actualbudget/docker-compose.yml b/templates/actualbudget/docker-compose.yml index 9c3b3a8..b7633e1 100644 --- a/templates/actualbudget/docker-compose.yml +++ b/templates/actualbudget/docker-compose.yml @@ -25,7 +25,7 @@ services: limits: memory: 256M healthcheck: - test: ["CMD", "node", "-e", "const http = require('http'); http.get('http://localhost:5006/', (r) => { process.exit(r.statusCode === 200 ? 0 : 1) }).on('error', () => process.exit(1))"] + test: ["CMD", "node", "-e", "const http = require('http'); http.get('http://127.0.0.1:5006/', (r) => { process.exit(r.statusCode === 200 ? 0 : 1) }).on('error', () => process.exit(1))"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/audiobookshelf/docker-compose.yml b/templates/audiobookshelf/docker-compose.yml index 9fd0523..317acbe 100644 --- a/templates/audiobookshelf/docker-compose.yml +++ b/templates/audiobookshelf/docker-compose.yml @@ -39,7 +39,7 @@ services: limits: memory: 512M healthcheck: - test: ["CMD", "wget", "--spider", "-q", "http://localhost:80/healthcheck"] + test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:80/healthcheck"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/bentopdf/docker-compose.yml b/templates/bentopdf/docker-compose.yml index 77a609b..631e5c7 100644 --- a/templates/bentopdf/docker-compose.yml +++ b/templates/bentopdf/docker-compose.yml @@ -20,7 +20,7 @@ services: limits: memory: 384M healthcheck: - test: ["CMD", "wget", "--spider", "-q", "http://localhost:8080"] + test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:8080"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/bookstack/docker-compose.yml b/templates/bookstack/docker-compose.yml index 5b06385..a598a55 100644 --- a/templates/bookstack/docker-compose.yml +++ b/templates/bookstack/docker-compose.yml @@ -37,7 +37,7 @@ services: limits: memory: 512M healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:80"] + test: ["CMD", "curl", "-f", "http://127.0.0.1:80"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/calcom/docker-compose.yml b/templates/calcom/docker-compose.yml index 581b0b7..8e9987d 100644 --- a/templates/calcom/docker-compose.yml +++ b/templates/calcom/docker-compose.yml @@ -42,7 +42,7 @@ services: memory: 768M healthcheck: # GET (-O /dev/null), not --spider (HEAD): the Next.js API route rejects HEAD, so --spider flaps unhealthy. - test: ["CMD", "wget", "-q", "-O", "/dev/null", "http://localhost:3000/api/auth/providers"] + test: ["CMD", "wget", "-q", "-O", "/dev/null", "http://127.0.0.1:3000/api/auth/providers"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/calibre-web/docker-compose.yml b/templates/calibre-web/docker-compose.yml index f810b0b..7201282 100644 --- a/templates/calibre-web/docker-compose.yml +++ b/templates/calibre-web/docker-compose.yml @@ -37,7 +37,7 @@ services: limits: memory: 768M healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:8083"] + test: ["CMD", "curl", "-f", "http://127.0.0.1:8083"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/claper/docker-compose.yml b/templates/claper/docker-compose.yml index e50cc87..5ab408a 100644 --- a/templates/claper/docker-compose.yml +++ b/templates/claper/docker-compose.yml @@ -30,7 +30,7 @@ services: limits: memory: 384M healthcheck: - test: ["CMD", "wget", "--spider", "-q", "http://localhost:4000"] + test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:4000"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/code-server/docker-compose.yml b/templates/code-server/docker-compose.yml index 4d4e426..0904f74 100644 --- a/templates/code-server/docker-compose.yml +++ b/templates/code-server/docker-compose.yml @@ -27,7 +27,7 @@ services: limits: memory: 1024M healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:8443/healthz"] + test: ["CMD", "curl", "-f", "http://127.0.0.1:8443/healthz"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/docmost/docker-compose.yml b/templates/docmost/docker-compose.yml index 84b6b22..fb4653a 100644 --- a/templates/docmost/docker-compose.yml +++ b/templates/docmost/docker-compose.yml @@ -39,7 +39,7 @@ services: limits: memory: 384M healthcheck: - test: ["CMD", "node", "-e", "const http = require('http'); http.get('http://localhost:3000/', (r) => { process.exit(r.statusCode === 200 ? 0 : 1) }).on('error', () => process.exit(1))"] + test: ["CMD", "node", "-e", "const http = require('http'); http.get('http://127.0.0.1:3000/', (r) => { process.exit(r.statusCode === 200 ? 0 : 1) }).on('error', () => process.exit(1))"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/emby/docker-compose.yml b/templates/emby/docker-compose.yml index ed024ff..a82807f 100644 --- a/templates/emby/docker-compose.yml +++ b/templates/emby/docker-compose.yml @@ -29,7 +29,7 @@ services: limits: memory: 2048M healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:8096/emby/system/ping"] + test: ["CMD", "curl", "-f", "http://127.0.0.1:8096/emby/system/ping"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/ghost/docker-compose.yml b/templates/ghost/docker-compose.yml index 37ef9c3..dd67145 100644 --- a/templates/ghost/docker-compose.yml +++ b/templates/ghost/docker-compose.yml @@ -26,7 +26,7 @@ services: limits: memory: 512M healthcheck: - test: ["CMD", "node", "-e", "require('http').get('http://localhost:2368/',r=>{process.exit(r.statusCode<400?0:1)}).on('error',()=>process.exit(1))"] + test: ["CMD", "node", "-e", "require('http').get('http://127.0.0.1:2368/',r=>{process.exit(r.statusCode<400?0:1)}).on('error',()=>process.exit(1))"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/gitea/docker-compose.yml b/templates/gitea/docker-compose.yml index d4d8dc9..48d1c9c 100644 --- a/templates/gitea/docker-compose.yml +++ b/templates/gitea/docker-compose.yml @@ -37,7 +37,7 @@ services: # 404 until the install wizard is completed (INSTALL_LOCK), so it falsely reported unhealthy on a # fresh deploy. The gitea image ships curl (verified). 90s start_period covers first-boot DB migration. healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:3000/api/healthz"] + test: ["CMD", "curl", "-f", "http://127.0.0.1:3000/api/healthz"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/glance/docker-compose.yml b/templates/glance/docker-compose.yml index 1032cbb..648d878 100644 --- a/templates/glance/docker-compose.yml +++ b/templates/glance/docker-compose.yml @@ -22,7 +22,7 @@ services: limits: memory: 128M healthcheck: - test: ["CMD", "wget", "--spider", "-q", "http://localhost:8080"] + test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:8080"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/gokapi/docker-compose.yml b/templates/gokapi/docker-compose.yml index 824616e..a8ccbb4 100644 --- a/templates/gokapi/docker-compose.yml +++ b/templates/gokapi/docker-compose.yml @@ -39,7 +39,7 @@ services: limits: memory: 128M healthcheck: - test: ["CMD", "wget", "--spider", "-q", "http://localhost:53842"] + test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:53842"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/grafana/docker-compose.yml b/templates/grafana/docker-compose.yml index 0f25544..4dc4944 100644 --- a/templates/grafana/docker-compose.yml +++ b/templates/grafana/docker-compose.yml @@ -25,7 +25,7 @@ services: limits: memory: 512M healthcheck: - test: ["CMD", "wget", "--spider", "-q", "http://localhost:3000/api/health"] + test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:3000/api/health"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/gramps-web/docker-compose.yml b/templates/gramps-web/docker-compose.yml index 2cebb97..7f3a4b2 100644 --- a/templates/gramps-web/docker-compose.yml +++ b/templates/gramps-web/docker-compose.yml @@ -27,7 +27,7 @@ services: limits: memory: 384M healthcheck: - test: ["CMD", "wget", "--spider", "-q", "http://localhost:5000"] + test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:5000"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/home-assistant/docker-compose.yml b/templates/home-assistant/docker-compose.yml index 0bddf42..d130c95 100644 --- a/templates/home-assistant/docker-compose.yml +++ b/templates/home-assistant/docker-compose.yml @@ -40,7 +40,7 @@ services: limits: memory: 1024M healthcheck: - test: ["CMD", "curl", "-sf", "http://localhost:8123/manifest.json"] + test: ["CMD", "curl", "-sf", "http://127.0.0.1:8123/manifest.json"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/homebox/docker-compose.yml b/templates/homebox/docker-compose.yml index ff4144c..33356cd 100644 --- a/templates/homebox/docker-compose.yml +++ b/templates/homebox/docker-compose.yml @@ -28,7 +28,7 @@ services: limits: memory: 256M healthcheck: - test: ["CMD", "wget", "--spider", "-q", "http://localhost:7745/api/v1/status"] + test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:7745/api/v1/status"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/homepage/docker-compose.yml b/templates/homepage/docker-compose.yml index 7b059d1..f6d81d7 100644 --- a/templates/homepage/docker-compose.yml +++ b/templates/homepage/docker-compose.yml @@ -23,7 +23,7 @@ services: limits: memory: 256M healthcheck: - test: ["CMD", "wget", "--spider", "-q", "http://localhost:3000"] + test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:3000"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/immich/docker-compose.yml b/templates/immich/docker-compose.yml index e4ac41a..45ae1ee 100644 --- a/templates/immich/docker-compose.yml +++ b/templates/immich/docker-compose.yml @@ -54,7 +54,7 @@ services: limits: memory: 2048M healthcheck: - test: ["CMD", "curl", "-sf", "http://localhost:2283/api/server/ping"] + test: ["CMD", "curl", "-sf", "http://127.0.0.1:2283/api/server/ping"] interval: 30s timeout: 10s retries: 3 @@ -83,7 +83,7 @@ services: limits: memory: 1536M healthcheck: - test: ["CMD", "python3", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:3003/ping')"] + test: ["CMD", "python3", "-c", "import urllib.request; urllib.request.urlopen('http://127.0.0.1:3003/ping')"] interval: 30s timeout: 10s retries: 3 diff --git a/templates/jellyfin/docker-compose.yml b/templates/jellyfin/docker-compose.yml index abe0b4f..17cebe6 100644 --- a/templates/jellyfin/docker-compose.yml +++ b/templates/jellyfin/docker-compose.yml @@ -28,7 +28,7 @@ services: limits: memory: 2048M healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:8096/health"] + test: ["CMD", "curl", "-f", "http://127.0.0.1:8096/health"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/kimai/docker-compose.yml b/templates/kimai/docker-compose.yml index 499e497..552f33c 100644 --- a/templates/kimai/docker-compose.yml +++ b/templates/kimai/docker-compose.yml @@ -32,7 +32,7 @@ services: limits: memory: 384M healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:8001"] + test: ["CMD", "curl", "-f", "http://127.0.0.1:8001"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/komga/docker-compose.yml b/templates/komga/docker-compose.yml index 37f83a3..5a01173 100644 --- a/templates/komga/docker-compose.yml +++ b/templates/komga/docker-compose.yml @@ -40,7 +40,7 @@ services: # (exit 22) and the container reported "unhealthy" despite serving fine. The gotson/komga image # ships curl (verified), so curl -f on the unauthenticated endpoint is the correct probe. healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:25600/actuator/health"] + test: ["CMD", "curl", "-f", "http://127.0.0.1:25600/actuator/health"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/mealie/docker-compose.yml b/templates/mealie/docker-compose.yml index d2d989b..c3e9ef6 100644 --- a/templates/mealie/docker-compose.yml +++ b/templates/mealie/docker-compose.yml @@ -44,7 +44,7 @@ services: limits: memory: 1000M healthcheck: - test: ["CMD-SHELL", "python3 -c \"import socket; s=socket.create_connection(('localhost',9000),2); s.close()\""] + test: ["CMD-SHELL", "python3 -c \"import socket; s=socket.create_connection(('127.0.0.1',9000),2); s.close()\""] interval: 30s timeout: 5s retries: 3 diff --git a/templates/n8n/docker-compose.yml b/templates/n8n/docker-compose.yml index 53c3042..6d02023 100644 --- a/templates/n8n/docker-compose.yml +++ b/templates/n8n/docker-compose.yml @@ -27,7 +27,7 @@ services: limits: memory: 512M healthcheck: - test: ["CMD", "wget", "--spider", "-q", "http://localhost:5678/healthz"] + test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:5678/healthz"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/navidrome/docker-compose.yml b/templates/navidrome/docker-compose.yml index f7bcf91..eda5ca1 100644 --- a/templates/navidrome/docker-compose.yml +++ b/templates/navidrome/docker-compose.yml @@ -30,7 +30,7 @@ services: limits: memory: 256M healthcheck: - test: ["CMD", "wget", "--spider", "-q", "http://localhost:4533/ping"] + test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:4533/ping"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/nextcloud/docker-compose.yml b/templates/nextcloud/docker-compose.yml index 5c1f0c2..3c41038 100644 --- a/templates/nextcloud/docker-compose.yml +++ b/templates/nextcloud/docker-compose.yml @@ -53,7 +53,7 @@ services: limits: memory: 1024M healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:80/status.php"] + test: ["CMD", "curl", "-f", "http://127.0.0.1:80/status.php"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/onlyoffice/docker-compose.yml b/templates/onlyoffice/docker-compose.yml index 380d082..9717b27 100644 --- a/templates/onlyoffice/docker-compose.yml +++ b/templates/onlyoffice/docker-compose.yml @@ -25,7 +25,7 @@ services: limits: memory: 2048M healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:80/healthcheck"] + test: ["CMD", "curl", "-f", "http://127.0.0.1:80/healthcheck"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/opengist/docker-compose.yml b/templates/opengist/docker-compose.yml index dbaabea..ce4b344 100644 --- a/templates/opengist/docker-compose.yml +++ b/templates/opengist/docker-compose.yml @@ -23,7 +23,7 @@ services: limits: memory: 128M healthcheck: - test: ["CMD", "wget", "--spider", "-q", "http://localhost:6157/healthcheck"] + test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:6157/healthcheck"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/outline/docker-compose.yml b/templates/outline/docker-compose.yml index 6f54a70..b7f0810 100644 --- a/templates/outline/docker-compose.yml +++ b/templates/outline/docker-compose.yml @@ -39,7 +39,7 @@ services: limits: memory: 768M healthcheck: - test: ["CMD", "node", "-e", "const http = require('http'); http.get('http://localhost:3000/_health', (r) => { process.exit(r.statusCode === 200 ? 0 : 1) }).on('error', () => process.exit(1))"] + test: ["CMD", "node", "-e", "const http = require('http'); http.get('http://127.0.0.1:3000/_health', (r) => { process.exit(r.statusCode === 200 ? 0 : 1) }).on('error', () => process.exit(1))"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/paperless-ngx/docker-compose.yml b/templates/paperless-ngx/docker-compose.yml index 7b86d2e..4d40cc5 100644 --- a/templates/paperless-ngx/docker-compose.yml +++ b/templates/paperless-ngx/docker-compose.yml @@ -73,7 +73,7 @@ services: limits: memory: 768M healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:8000"] + test: ["CMD", "curl", "-f", "http://127.0.0.1:8000"] interval: 30s timeout: 10s retries: 5 diff --git a/templates/papra/docker-compose.yml b/templates/papra/docker-compose.yml index daa7dd2..bd12a4f 100644 --- a/templates/papra/docker-compose.yml +++ b/templates/papra/docker-compose.yml @@ -23,7 +23,7 @@ services: limits: memory: 256M healthcheck: - test: ["CMD", "wget", "--spider", "-q", "http://localhost:1221"] + test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:1221"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/plant-it/docker-compose.yml b/templates/plant-it/docker-compose.yml index 98634bc..7574521 100644 --- a/templates/plant-it/docker-compose.yml +++ b/templates/plant-it/docker-compose.yml @@ -28,7 +28,7 @@ services: limits: memory: 256M healthcheck: - test: ["CMD", "wget", "--spider", "-q", "http://localhost:8080/api/info"] + test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:8080/api/info"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/plex/docker-compose.yml b/templates/plex/docker-compose.yml index e3516ed..fb8940d 100644 --- a/templates/plex/docker-compose.yml +++ b/templates/plex/docker-compose.yml @@ -30,7 +30,7 @@ services: limits: memory: 2048M healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:32400/identity"] + test: ["CMD", "curl", "-f", "http://127.0.0.1:32400/identity"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/privatebin/docker-compose.yml b/templates/privatebin/docker-compose.yml index 1220c8f..df2041b 100644 --- a/templates/privatebin/docker-compose.yml +++ b/templates/privatebin/docker-compose.yml @@ -23,7 +23,7 @@ services: limits: memory: 128M healthcheck: - test: ["CMD", "wget", "--spider", "-q", "http://localhost:8080"] + test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:8080"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/radarr/docker-compose.yml b/templates/radarr/docker-compose.yml index 0bdd049..e7fd4df 100644 --- a/templates/radarr/docker-compose.yml +++ b/templates/radarr/docker-compose.yml @@ -34,7 +34,7 @@ services: limits: memory: 512M healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:7878/ping"] + test: ["CMD", "curl", "-f", "http://127.0.0.1:7878/ping"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/rallly/docker-compose.yml b/templates/rallly/docker-compose.yml index 8c13df6..a2d5a35 100644 --- a/templates/rallly/docker-compose.yml +++ b/templates/rallly/docker-compose.yml @@ -46,7 +46,7 @@ services: # container unhealthy, which made Traefik refuse to publish a route to it. Use Node (always present). # rallly's "/" returns 307 → /login, so accept any status < 500. healthcheck: - test: ["CMD", "node", "-e", "require('http').get('http://localhost:3000',r=>process.exit(r.statusCode<500?0:1)).on('error',()=>process.exit(1))"] + test: ["CMD", "node", "-e", "require('http').get('http://127.0.0.1:3000',r=>process.exit(r.statusCode<500?0:1)).on('error',()=>process.exit(1))"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/recipe-importer/docker-compose.yml b/templates/recipe-importer/docker-compose.yml index 8dc3730..40fe9a2 100644 --- a/templates/recipe-importer/docker-compose.yml +++ b/templates/recipe-importer/docker-compose.yml @@ -29,7 +29,7 @@ services: limits: memory: 128M healthcheck: - test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')"] + test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8000/health')"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/romm/docker-compose.yml b/templates/romm/docker-compose.yml index b461fed..d4a81e1 100644 --- a/templates/romm/docker-compose.yml +++ b/templates/romm/docker-compose.yml @@ -74,7 +74,7 @@ services: limits: memory: 512M healthcheck: - test: ["CMD", "wget", "--spider", "-q", "http://localhost:8080/"] + test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:8080/"] interval: 30s timeout: 10s retries: 3 diff --git a/templates/seerr/docker-compose.yml b/templates/seerr/docker-compose.yml index ffd223b..a2146dc 100644 --- a/templates/seerr/docker-compose.yml +++ b/templates/seerr/docker-compose.yml @@ -22,7 +22,7 @@ services: limits: memory: 384M healthcheck: - test: ["CMD", "wget", "--spider", "-q", "http://localhost:5055/api/v1/status"] + test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:5055/api/v1/status"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/sonarr/docker-compose.yml b/templates/sonarr/docker-compose.yml index 8e21732..ae0b8c9 100644 --- a/templates/sonarr/docker-compose.yml +++ b/templates/sonarr/docker-compose.yml @@ -33,7 +33,7 @@ services: limits: memory: 512M healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:8989/ping"] + test: ["CMD", "curl", "-f", "http://127.0.0.1:8989/ping"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/tandoor/docker-compose.yml b/templates/tandoor/docker-compose.yml index e192626..8d17c7d 100644 --- a/templates/tandoor/docker-compose.yml +++ b/templates/tandoor/docker-compose.yml @@ -36,7 +36,7 @@ services: limits: memory: 512M healthcheck: - test: ["CMD", "wget", "--spider", "-q", "http://localhost:8080/accounts/login/"] + test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:8080/accounts/login/"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/termix/docker-compose.yml b/templates/termix/docker-compose.yml index 1d1a69b..703a9bc 100644 --- a/templates/termix/docker-compose.yml +++ b/templates/termix/docker-compose.yml @@ -23,7 +23,7 @@ services: limits: memory: 128M healthcheck: - test: ["CMD", "wget", "--spider", "-q", "http://localhost:8080"] + test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:8080"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/vaultwarden/docker-compose.yml b/templates/vaultwarden/docker-compose.yml index f5ea8f3..977ef1c 100644 --- a/templates/vaultwarden/docker-compose.yml +++ b/templates/vaultwarden/docker-compose.yml @@ -53,7 +53,7 @@ services: limits: memory: 256M healthcheck: - test: ["CMD", "wget", "--spider", "-q", "http://localhost:80/alive"] + test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:80/alive"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/wanderer/docker-compose.yml b/templates/wanderer/docker-compose.yml index a66d740..04f59e5 100644 --- a/templates/wanderer/docker-compose.yml +++ b/templates/wanderer/docker-compose.yml @@ -30,7 +30,7 @@ services: limits: memory: 384M healthcheck: - test: ["CMD", "wget", "--spider", "-q", "http://localhost:3000"] + test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:3000"] interval: 30s timeout: 5s retries: 3 @@ -59,7 +59,7 @@ services: limits: memory: 256M healthcheck: - test: ["CMD", "wget", "--spider", "-q", "http://localhost:7700/health"] + test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:7700/health"] interval: 10s timeout: 5s retries: 5 diff --git a/templates/wger/docker-compose.yml b/templates/wger/docker-compose.yml index bc6ad47..45905f8 100644 --- a/templates/wger/docker-compose.yml +++ b/templates/wger/docker-compose.yml @@ -27,7 +27,7 @@ services: limits: memory: 384M healthcheck: - test: ["CMD", "wget", "--spider", "-q", "http://localhost:80"] + test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:80"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/wishlist/docker-compose.yml b/templates/wishlist/docker-compose.yml index 51eafe9..1a08848 100644 --- a/templates/wishlist/docker-compose.yml +++ b/templates/wishlist/docker-compose.yml @@ -22,7 +22,7 @@ services: limits: memory: 128M healthcheck: - test: ["CMD", "wget", "--spider", "-q", "http://localhost:3000"] + test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:3000"] interval: 30s timeout: 5s retries: 3 diff --git a/templates/zipline/docker-compose.yml b/templates/zipline/docker-compose.yml index 09e428b..516c496 100644 --- a/templates/zipline/docker-compose.yml +++ b/templates/zipline/docker-compose.yml @@ -31,7 +31,7 @@ services: limits: memory: 512M healthcheck: - test: ["CMD", "node", "-e", "const http = require('http'); http.get('http://localhost:3000/api/health', (r) => { process.exit(r.statusCode === 200 ? 0 : 1) }).on('error', () => process.exit(1))"] + test: ["CMD", "node", "-e", "const http = require('http'); http.get('http://127.0.0.1:3000/api/health', (r) => { process.exit(r.statusCode === 200 ? 0 : 1) }).on('error', () => process.exit(1))"] interval: 30s timeout: 5s retries: 3