busybox-static for healthchecks; alloy: rely on the default UI listener

- alpine's /bin/busybox is musl-dynamic and cannot execute in the
  distroless loki image (missing loader); busybox-static links in
- alloy 1.x refuses to configure the ui service from a config block;
  the default UI already listens on 127.0.0.1:12345 where the
  healthcheck probes
This commit is contained in:
Frank
2026-08-22 04:09:04 -07:00
parent dc421efea4
commit 824d39a29e
4 changed files with 16 additions and 11 deletions
+4 -1
View File
@@ -9,7 +9,10 @@
# podman build -t franksdank/alloy:latest -f dankclaw/alloy/Containerfile .
FROM docker.io/library/alpine:latest AS tools
# busybox provides wget for the healthcheck.
# busybox-static is statically linked: the target images have no dynamic
# loader (loki is distroless), so the alpine default /bin/busybox (musl
# dynamic) would fail with "no such file or directory".
RUN apk add --no-cache busybox-static
FROM docker.io/grafana/alloy:latest
COPY --from=tools /bin/busybox /usr/local/bin/busybox
+4 -1
View File
@@ -9,7 +9,10 @@
# podman build -t franksdank/loki:latest -f dankclaw/loki/Containerfile .
FROM docker.io/library/alpine:latest AS tools
# busybox provides wget for the healthcheck.
# busybox-static is statically linked: the target images have no dynamic
# loader (loki is distroless), so the alpine default /bin/busybox (musl
# dynamic) would fail with "no such file or directory".
RUN apk add --no-cache busybox-static
FROM docker.io/grafana/loki:latest
COPY --from=tools /bin/busybox /usr/local/bin/busybox
+3 -6
View File
@@ -5,12 +5,9 @@ logging {
level = "info"
}
// Local listener so the container healthcheck can probe us.
// Alloy >= 1.0 renamed the server component to ui.
ui {
host = "0.0.0.0"
port = 12345
}
// The alloy UI service listens on 127.0.0.1:12345 by default; the
// in-container healthcheck probes it there. alloy 1.x refuses to
// configure the ui service from a config block, so there is no block.
// Ship logs to Loki (container name on the podman network).
loki.write "default" {
+5 -3
View File
@@ -158,7 +158,9 @@ CADDYFILE="$REPO_ROOT/dankclaw/Caddyfile"
[ "$n" -ge 2 ] || { echo "expected >=2 busybox healthchecks, found $n"; return 1; }
}
@test "alloy config uses the ui component (the server component was renamed)" {
grep -qE '^ui \{' "$REPO_ROOT/shared/alloy/config.alloy"
! grep -qE '^server \{' "$REPO_ROOT/shared/alloy/config.alloy"
@test "alloy config declares no ui/server block (default UI listens on 127.0.0.1:12345)" {
# alloy 1.x refuses to configure the ui service from a config block
# ("service ui does not support being configured"). The default UI
# already listens where the in-container healthcheck probes.
! grep -qE '^(ui|server) \{' "$REPO_ROOT/shared/alloy/config.alloy"
}