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)0 — apk 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_PLUGINS—Comma-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