Docker überwachen

Node64 überwacht Docker-Container auf dem eigenen Host und auf entfernten Hosts – ohne Agent. Zustand, Health, Neustarts, CPU, RAM, Netz und I/O mit Verlauf, dazu Regeln und Meldungen wie bei Proxmox VE. Die Seite liegt unter Healthchecks → Docker und läuft, solange das Modul Healthchecks eingeschaltet ist.

Überblick

Für Docker gibt es zwei Wege: die Docker-Überwachung für alle Container eines Hosts – wie bei Proxmox VE – und den Check-Typ docker für einzelne Container.

Docker-Überwachung

Docker-Überwachung unter Healthchecks → Docker (/healthchecks/docker): Die Seite beginnt immer mit der Übersicht der Docker-Hosts – Kacheln und eine Tabelle mit Zustand, Containern, CPU/RAM, Bearbeiten, Aus und Löschen –, auch mit nur einem oder keinem Host. Der lokale Docker-Socket wird nicht automatisch überwacht: Erst mit Diese Maschine hinzufügen (lokaler Socket) in der Übersicht oder über das Formular Docker-Host hinzufügen kommt er dazu; danach überwacht Node64 alle Container des Hosts. Bereits eingerichtete Hosts bleiben. Weitere Hosts bindest du aus der Ferne per SSH oder TLS an.

  • Alle 30 Sekunden: Zustand, Health, Neustarts, Exit-Code und OOM, CPU (bezogen auf das CPU-Limit bzw. alle Kerne), RAM ohne Page-Cache wie bei docker stats (bezogen auf das Limit bzw. den RAM des Hosts), Netz und Block-I/O – mit Verlauf von 1 Stunde bis 30 Tage.
  • Störung sofort bei unhealthy, Neustart-Schleife (3 Neustarts in 10 Minuten oder Status restarting), Ende mit Fehler, OOM oder dead. Beendete Container zählen nur, wenn sie laufen sollen (liefen schon einmal oder fest eingestellt); Exit-Code 0, 130 und 143 gelten als normaler Stopp.
  • Regeln mit Vererbung Host → Container (Störung, gestoppt, pausiert, Neustart, CPU- und RAM-Schwellen, Verzögerung), dazu Kanäle, Ruhezeiten und Wartungsfenster – wie bei Proxmox VE.
  • Container-Seite mit Werten, Graphen, Labels und Regeln. Als Check führen legt zusätzlich einen Check vom Typ docker an (Statusseiten, Sync, Uptime); vorhandene Docker-Checks werden automatisch zugeordnet.
  • Das Label node64.nomonitor=true schließt einen Container aus.
  • Checks ohne Container erscheinen als „Container fehlt“. Ohne Host zeigt die Übersicht einen Einstieg und verweist auf vorhandene Docker-Checks in der Check-Liste.
  • Host-Seite mit dem Namen des Hosts im Titel und einem Knopf zum Löschen; danach geht es zurück zur Übersicht. Zustand eines Hosts: in Ordnung, teilweise gestört (einzelne Container gestört) oder nicht erreichbar.
  • API: GET /api/healthchecks/docker/containers und /api/healthchecks/docker/systems/{id}/… wie bei Proxmox VE; Prometheus node64_docker_*. Export und Import enthalten den Docker-Host.
  • Meldungen von Docker-Hosts tragen den Betreff „Docker: …“ und gehen über die Kanäle aus den Regeln.

Check-Typ docker

Fragt die Docker-Engine-API nach dem Zustand eines Containers. Ziel ist der Name oder die ID des Containers. Docker-Checks stehen als normale Zeilen in der Healthchecks-Liste.

Anlegen: Unter Healthchecks → Neuer Check den Typ Docker-Container wählen, dann den Docker-Host und den Container aus dem letzten Abruf – angelegt wie mit Als Check führen (Intervall, Gruppe und Kanäle aus den Regeln, Name optional), siehe Check aus einem überwachten System. Container überwachen auf der Seite eines Docker-Hosts wählt den Host gleich vor (/healthchecks/new?type=sys:docker&sys=ID). Den Containernamen von Hand einzutragen gibt es bei neuen Checks nicht mehr; vorhandene Docker-Checks bleiben bearbeitbar, API und Import sind unverändert.

Zustand des ContainersErgebnis
läuftOK
läuft mit Docker-Healthcheck healthy oder startingOK
Docker-Healthcheck unhealthygestört
gestoppt (mit Exit-Code, auch OOM), pausiert, Neustart-Schleifegestört
nicht vorhandengestört
Docker-Socket nicht erreichbargestört, mit Hinweis
OptionStandardHinweis
Docker-Host (host)unix:///var/run/docker.sockalternativ tcp://… oder http(s)://…; global per NODE64_DOCKER_HOST oder je Check
TimeoutGesamt-Timeout des Checks (10 s)die Containerliste hat 5 s

Docker-Checks laufen nur auf der Node, auf der der Container läuft. Sie lassen sich weder online prüfen noch auf eine andere Node umhängen. Mit ipv64.net verknüpft wird ihr Zustand trotzdem gemeldet und ist im Portal sichtbar.

Beispiele: Vaultwarden überwacht den Container vaultwarden samt Docker-Healthcheck, Jellyfin den Container jellyfin.

Zugriff auf den Docker-Socket

Am einfachsten bindest du den Socket direkt ein. Die Gruppe des Sockets findest du mit stat -c %g /var/run/docker.sock heraus:

docker-compose.yml
services:
  node:
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    group_add:
      - "996"   # Gruppe des Sockets: stat -c %g /var/run/docker.sock
Sicherheitshinweis

Wer den Docker-Socket hat, kann den ganzen Host steuern – auch mit :ro. Das schützt nur die Datei, nicht die API dahinter. Node64 sendet zwar ausschließlich lesende GET-Anfragen, aber eine Schwachstelle oder ein gestohlenes Konto hätte trotzdem vollen Zugriff. Sicherer ist ein Socket-Proxy, der nur die Container-Abfragen durchlässt.

Mit dem verbreiteten docker-socket-proxy sieht das so aus. Node64 braucht nur CONTAINERS=1, INFO=1 ist optional:

docker-compose.yml
services:
  socket-proxy:
    image: tecnativa/docker-socket-proxy
    container_name: socket-proxy
    restart: unless-stopped
    environment:
      CONTAINERS: 1          # nur Container-Abfragen erlauben
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    # keinen Port veröffentlichen – nur Node64 im selben Netz greift zu

  node:
    image: ghcr.io/ipv64net/node64:latest
    container_name: node64
    restart: unless-stopped
    depends_on:
      - socket-proxy
    ports:
      - "8080:8080"
    volumes:
      - node64-data:/data
    environment:
      NODE64_DOCKER_HOST: tcp://socket-proxy:2375

volumes:
  node64-data:

Das öffentliche Node64-Image erscheint in Kürze. Den Docker-Host kannst du statt global auch je Check im Feld Docker-Host eintragen.

Docker-Hosts aus der Ferne

Neben dem lokalen Host überwacht Node64 weitere Docker-Hosts – ohne Agent. Unter Healthchecks → Docker → Docker-Host hinzufügen (/healthchecks/docker/new) wählst du die Verbindung; die Übersicht unter /healthchecks/docker zeigt Kacheln (Hosts, Container, laufend, gestört, Auslastung) und eine Tabelle aller Hosts.

VerbindungAdresseHinweis
SSH (empfohlen)ssh://user@host[:port][/socket]Node64 erzeugt einen ed25519-Schlüssel; den Host-Schlüssel bestätigst du bei Verbindung testen (SHA256:…). Weg: Socket-Weiterleitung (braucht AllowTcpForwarding im sshd), sonst automatisch docker system dial-stdio (braucht die docker-CLI auf dem Host). Der Benutzer muss in der Gruppe docker sein.
TLShttps://host:2376Docker-API mit Client-Zertifikat und -Schlüssel (cert.pem, key.pem); den Server prüft Node64 per ca.pem oder bestätigtem Fingerabdruck.
TCPtcp://host:2375über einen docker-socket-proxy mit CONTAINERS=1 und INFO=1 – nur im LAN.

Einrichtung per SSH – das Formular führt dich in fünf Schritten durch, mit fertigen Befehlen zum Kopieren:

  1. Benutzer anlegen
    Auf dem Docker-Host einen Benutzer mit Zugriff auf Docker anlegen:
    bash
    sudo useradd -m -s /bin/sh node64
    sudo usermod -aG docker node64
  2. Schlüssel erzeugen
    Im Formular auf Schlüssel erzeugen klicken (ed25519). Alternativ einen eigenen privaten Schlüssel ohne Passphrase einfügen; er wird verschlüsselt gespeichert.
  3. Schlüssel eintragen
    Die angezeigten Befehle auf dem Docker-Host ausführen. Die Zeile in authorized_keys erlaubt nur die Docker-API, keine Shell:
    bash
    sudo mkdir -p /home/node64/.ssh
    echo 'restrict,command="docker system dial-stdio" ssh-ed25519 AAAA… node64' | sudo tee -a /home/node64/.ssh/authorized_keys
    sudo chown -R node64:node64 /home/node64/.ssh
    sudo chmod 700 /home/node64/.ssh
    sudo chmod 600 /home/node64/.ssh/authorized_keys
    Nach Neuen Schlüssel erzeugen diesen Schritt wiederholen und die alte Zeile löschen.
  4. Verbindung testen
    Benutzer und Host eintragen, Verbindung testen klicken und den angezeigten Host-Key mit der Ausgabe dieses Befehls vergleichen; stimmt er, bestätigen:
    bash
    sudo ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
  5. Speichern
    Danach erscheinen die Container des Hosts.
  • Zugangsdaten speichert Node64 verschlüsselt. Als Check führen nutzt bei SSH und TLS dieselbe Verbindung.
  • Den lokalen Socket fügst du mit Diese Maschine hinzufügen (lokaler Socket) hinzu; Hosts bearbeiten unter /healthchecks/docker/system/{id}/edit.
  • Host aus: Checks eines SSH- oder TLS-Hosts („Als Check führen“) sind pausiert, solange der Host ausgeschaltet ist. Löschen eines Hosts löscht nur diese Checks mit; andere Docker-Checks bleiben.
  • Adresse ändern: Die Checks ziehen mit. Zeigt die neue Adresse auf eine andere Maschine, beginnt der Verlauf neu. Beim Wechsel der Verbindungsart gibst du Zugangsdaten und Fingerabdruck neu ein.
  • SSH-Host-Schlüssel: Node64 bevorzugt Ed25519 – zum Vergleich auf dem Host ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub. Muss Node64 auf docker system dial-stdio ausweichen, bleibt es 10 Minuten dabei und versucht danach wieder die Socket-Weiterleitung.
  • API: POST /api/healthchecks/docker/systems mit addresses, pin_sha256 und secret – als JSON {"key", "cert", "ca"} oder einfach der private SSH-Schlüssel als PEM.

Etwas unklar, fehlt etwas oder hast du eine Frage zu Node64? Frag im offiziellen Forum v64.tech.

Fragen zu Node64?
Für alle Fragen zum Produkt gibt es das offizielle Forum: Einrichtung, Fehlersuche, Ideen und Austausch mit der Community und dem ipv64.net-Team.
Zum Forum v64.tech