image-checker/README.md
2025-07-17 03:22:57 +02:00

79 lines
2.3 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Docker Image Update Prometheus Exporter
Dieser Exporter prüft für **alle laufenden Docker-Container auf dem Host**, ob das jeweils verwendete Image-Tag im zugehörigen Registry ein Update aufweist (Digest-Vergleich). Das Ergebnis wird als Metrik für Prometheus exportiert und parallel als Log ausgegeben.
## Features
- Prüft ausschließlich Images der aktiven (laufenden) Container
- Unterstützt beliebige Registries (inkl. private Registries mit Docker-Login)
- Exportiert Metrik:
`docker_image_update_available{container_name, image, tag}`
(1 = Update vorhanden, 0 = aktuell)
- Logging der Prüfungen im Terminal
## Nutzung
### Voraussetzungen
- Docker läuft lokal
- Zugriff auf /var/run/docker.sock (bei Ausführung in einem Container: Volume mount!)
- Go 1.19+ (zum Selbst-Bauen)
- Abhängigkeiten:
- github.com/docker/docker
- github.com/regclient/regclient
- github.com/prometheus/client_golang
### Build & Run (nativ)
```bash
go build -o docker-image-exporter
./docker-image-exporter
```
### Oder via Docker
```Dockerfile
FROM golang:1.21-alpine AS builder
WORKDIR /app
COPY . .
RUN go build -o exporter .
FROM alpine
COPY --from=builder /app/exporter /usr/local/bin/exporter
ENTRYPOINT ["/usr/local/bin/exporter"]
```
```bash
docker build -t docker-image-exporter .
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -p 9788:9788 docker-image-exporter
```
### Prometheus Konfiguration
Job z.B. so eintragen:
```yaml
scrape_configs:
- job_name: 'docker_image_update'
scrape_interval: 24h # oder beliebiges passendes Intervall
static_configs:
- targets: ['localhost:9788']
```
## Metrik-Beispiel
```
docker_image_update_available{container_name="/mein_container",image="nginx",tag="latest"} 1
docker_image_update_available{container_name="/db",image="postgres",tag="16"} 0
```
1 = Update verfügbar, 0 = kein Update nötig.
## Hinweise
- Für private Registries muss vorab ein `docker login` erfolgen.
- Der Exporter prüft parallelisiert, Logging erfolgt auf der Konsole.
- Es werden ausschließlich aktuell laufende Container betrachtet.
- Das Intervall für Prometheus sollte je nach Anwendungsfall gewählt werden; typischerweise genügt einmal täglich.
Fragen, Bugs oder Feature-Wünsche?
Gerne im Issue-Tracker oder direkt anpassen!