blumeops/containers/grafana/Dockerfile
Erich Blume 613f05dfde
All checks were successful
Build Container (Nix) / detect (push) Successful in 2s
Build Container / detect (push) Successful in 2s
Build Container (Nix) / build (alloy) (push) Successful in 9s
Build Container (Nix) / build (cv) (push) Successful in 2s
Build Container (Nix) / build (devpi) (push) Successful in 2s
Build Container (Nix) / build (grafana) (push) Successful in 2s
Build Container / build (cv) (push) Successful in 20s
Build Container (Nix) / build (grafana-sidecar) (push) Successful in 2s
Build Container (Nix) / build (homepage) (push) Successful in 2s
Build Container (Nix) / build (kiwix-serve) (push) Successful in 2s
Build Container (Nix) / build (kubectl) (push) Successful in 3s
Build Container (Nix) / build (loki) (push) Successful in 2s
Build Container / build (alloy) (push) Successful in 40s
Build Container (Nix) / build (mealie) (push) Successful in 1s
Build Container (Nix) / build (miniflux) (push) Successful in 2s
Build Container (Nix) / build (navidrome) (push) Successful in 2s
Build Container / build (devpi) (push) Successful in 41s
Build Container (Nix) / build (nettest) (push) Successful in 15s
Build Container / build (grafana-sidecar) (push) Successful in 1m27s
Build Container / build (grafana) (push) Successful in 3m23s
Build Container (Nix) / build (ntfy) (push) Successful in 3m19s
Build Container (Nix) / build (prometheus) (push) Successful in 1s
Build Container (Nix) / build (quartz) (push) Successful in 1s
Build Container (Nix) / build (runner-job-image) (push) Successful in 1s
Build Container (Nix) / build (teslamate) (push) Successful in 2s
Build Container (Nix) / build (transmission) (push) Successful in 2s
Build Container (Nix) / build (transmission-exporter) (push) Successful in 1s
Build Container (Nix) / build (unpoller) (push) Successful in 1s
Build Container / build (kiwix-serve) (push) Successful in 1m17s
Build Container / build (kubectl) (push) Successful in 41s
Build Container / build (homepage) (push) Successful in 8m21s
Build Container / build (mealie) (push) Successful in 1m1s
Build Container / build (loki) (push) Successful in 8m21s
Build Container / build (miniflux) (push) Successful in 2m24s
Build Container / build (nettest) (push) Successful in 14s
Build Container / build (ntfy) (push) Successful in 8m33s
Build Container / build (prometheus) (push) Successful in 37s
Build Container / build (quartz) (push) Successful in 19s
Build Container / build (navidrome) (push) Successful in 10m36s
Build Container / build (runner-job-image) (push) Successful in 3m18s
Build Container / build (transmission) (push) Successful in 20s
Build Container / build (transmission-exporter) (push) Successful in 21s
Build Container / build (unpoller) (push) Successful in 11s
Build Container / build (teslamate) (push) Successful in 4m42s
Add consistent OCI labels to all container Dockerfiles
Every container now carries title, description, version, source, and
vendor labels per the OCI image spec. Version is derived from the
existing CONTAINER_APP_VERSION ARG at build time.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 20:42:00 -07:00

68 lines
2.4 KiB
Docker

ARG CONTAINER_APP_VERSION=12.3.3
FROM alpine:3.22
ARG TARGETPLATFORM
ARG CONTAINER_APP_VERSION
ARG GRAFANA_VERSION=${CONTAINER_APP_VERSION}
RUN set -e && \
apk --no-cache add dumb-init curl && \
# Detect architecture
if [ -n "$TARGETPLATFORM" ]; then \
echo "TARGETPLATFORM: $TARGETPLATFORM"; \
case "$TARGETPLATFORM" in \
linux/arm64*) ARCH="arm64" ;; \
linux/amd64*) ARCH="amd64" ;; \
*) ARCH="" ;; \
esac; \
else \
echo "TARGETPLATFORM not set, detecting from uname..."; \
UNAME_ARCH=$(uname -m); \
echo "uname -m: $UNAME_ARCH"; \
case "$UNAME_ARCH" in \
aarch64|arm64) ARCH="arm64" ;; \
x86_64) ARCH="amd64" ;; \
*) ARCH="" ;; \
esac; \
fi && \
if [ -z "$ARCH" ]; then \
echo "ERROR: Unsupported architecture"; \
exit 1; \
fi && \
url="https://dl.grafana.com/oss/release/grafana-${GRAFANA_VERSION}.linux-${ARCH}.tar.gz" && \
echo "URL: $url" && \
curl -fSL "$url" | tar -xz -C /tmp && \
mv /tmp/grafana-${GRAFANA_VERSION} /usr/share/grafana && \
apk del curl
# Standard Grafana paths
RUN mkdir -p /etc/grafana /var/lib/grafana /var/log/grafana && \
cp /usr/share/grafana/conf/defaults.ini /etc/grafana/grafana.ini && \
cp /usr/share/grafana/conf/defaults.ini /etc/grafana/defaults.ini
# UID 472 matches official Grafana image for PVC compatibility
RUN adduser -D -u 472 -h /usr/share/grafana grafana && \
chown -R grafana:grafana /usr/share/grafana /etc/grafana /var/lib/grafana /var/log/grafana
ENV PATH="/usr/share/grafana/bin:$PATH"
USER grafana
WORKDIR /usr/share/grafana
EXPOSE 3000
ARG CONTAINER_APP_VERSION
LABEL org.opencontainers.image.title="Grafana"
LABEL org.opencontainers.image.description="Grafana OSS observability platform"
LABEL org.opencontainers.image.version="${CONTAINER_APP_VERSION}"
LABEL org.opencontainers.image.source="https://forge.eblu.me/eblume/blumeops"
LABEL org.opencontainers.image.vendor="blumeops"
ENTRYPOINT ["/usr/bin/dumb-init", "--"]
CMD ["grafana", "server", \
"--homepath=/usr/share/grafana", \
"--config=/etc/grafana/grafana.ini", \
"cfg:default.paths.data=/var/lib/grafana", \
"cfg:default.paths.logs=/var/log/grafana", \
"cfg:default.paths.plugins=/var/lib/grafana/plugins", \
"cfg:default.paths.provisioning=/etc/grafana/provisioning"]