Sign inSign up

truebyteinnovationllp/grafana

By truebyteinnovationllp

Updated 3 months ago

Hardened Grafana OSS from source — Go 1.26 + Node 24, non-root, Cosign-signed, 0 OS CVEs

Image
Monitoring & observability
0

10K+

truebyteinnovationllp/grafana repository overview

Grafana — Hardened, Source-Built Image

Docker Pulls Cosign Verified License

Minimal, security-hardened Grafana OSS — built entirely from source on Alpine Linux. A four-stage build clones the pinned upstream commit, compiles the Node 24 frontend, cross-compiles the Go 1.26 backend for every target architecture, and ships a lean non-root runtime image.

Why this image?

FeatureOfficial grafana/grafanaThis image
OS CVEs2 HIGH (OpenSSL)0apk upgrade pulls latest patches
Built from sourceNoYes — Go 1.26 backend + Node 24 frontend
Non-rootYesYes — uid 472 (well-known Grafana uid)
Read-only rootfsNoYes
Cosign signedNoYes
SBOM + provenanceNoYes
Multi-archamd64, arm64amd64, arm64, ppc64le, s390x
Bundled pluginsElasticsearch (24 CVEs)None

Tags

TagGrafana versionPlatforms
13.0.2, latestGrafana OSS 13.0.2 (commit 3fcdbc5a)linux/amd64 · linux/arm64 · linux/ppc64le · linux/s390x

Quick start

docker run -d --name grafana \
  -p 3000:3000 \
  -v grafana-data:/var/lib/grafana \
  truebyteinnovationllp/grafana:13.0.2

Open http://localhost:3000 and log in with admin / admin (you will be prompted to change the password). Check health:

curl -s http://localhost:3000/api/health
# {"commit":"3fcdbc5a","database":"ok","version":"13.0.2"}

Hardened deployment

Run with a read-only root filesystem — only the data volume needs to be writable:

docker run -d --name grafana \
  --read-only \
  --cap-drop ALL \
  --security-opt no-new-privileges \
  -p 3000:3000 \
  -v grafana-data:/var/lib/grafana \
  --tmpfs /tmp \
  truebyteinnovationllp/grafana:13.0.2

Configuration

Configure via GF_<SECTION>_<KEY> environment variables, or mount your own config:

docker run -d --name grafana \
  -p 3000:3000 \
  -e GF_SECURITY_ADMIN_PASSWORD='<strong-password>' \
  -e GF_SERVER_ROOT_URL='https://grafana.example.com' \
  -v grafana-data:/var/lib/grafana \
  truebyteinnovationllp/grafana:13.0.2

Common environment variables:

VariableDefaultPurpose
GF_SECURITY_ADMIN_PASSWORDadminInitial admin password
GF_SERVER_ROOT_URLhttp://localhost:3000External URL (behind a reverse proxy)
GF_PATHS_DATA/var/lib/grafanaDatabase, plugins, sessions
GF_PATHS_PROVISIONING/etc/grafana/provisioningDatasource/dashboard provisioning
GF_LOG_MODEconsoleLog to stdout (read-only-rootfs friendly)
GF_INSTALL_PLUGINSComma-separated list of plugins to install at startup

See the Grafana configuration reference for the full list.

Verifying the signature

The image is signed with Cosign. The public key is published at:

https://gitlab.truebyteinnovation.com/internal-docker/docker-images/-/raw/main/assets/cosign.pub
# Download the public key
curl -sSfL https://gitlab.truebyteinnovation.com/internal-docker/docker-images/-/raw/main/assets/cosign.pub \
  -o cosign.pub

# Verify
cosign verify --key cosign.pub truebyteinnovationllp/grafana:13.0.2

Vulnerability status

This image is scanned with Trivy and Docker Scout on every build. CVEs suppressed via OpenVEX (grafana.openvex.json):

CVELibraryJustification
CVE-2025-60876BusyBox wgetHealthcheck-only; request target is a constant localhost URL — not adversary-controlled
CVE-2026-21728grafana/tempo v1Server-side query engine; Grafana imports only protobuf wire types — affected code path not compiled in
CVE-2026-28377grafana/tempo v1S3 storage backend; same reasoning — only protobuf types imported, server code absent
CVE-2026-42151prometheus/prometheusConfig HTTP API handler; Grafana uses prometheus as a Go library only — HTTP server never instantiated

All four suppressions match the Docker Hardened Images (DHI) vulnerability profile for Grafana 13.0.2.

Build resources

The frontend build requires ~6 GB RAM for webpack/rspack. Total build time is 15–30 minutes depending on hardware (builders run natively on $BUILDPLATFORM; Go cross-compiles without QEMU). The Node modules and Go module cache stay in throwaway builder stages and do not land in the final image.

Source

Maintained by TrueByte Innovation.

Tag summary

Content type

Image

Digest

sha256:2165f7f08

Size

311.6 MB

Last updated

3 months ago

docker pull truebyteinnovationllp/grafana