Wie (und weil) Fügen Sie Systemdiagnosen zu Ihren Docker-Containern hinzu

Inhalt

Blaues Docker-Logo auf violettem Hintergrund

Sie haben Ihr Docker-Image erstellt, Sie haben es bei Ihrer Registrierung eingereicht und einen neuen Container in Produktion gestartet. Alles funktioniert, wenn Sie für den Tag nach Hause kommen, aber wenn Sie am nächsten Morgen zurückkommen, werden Sie von Ausfällen gemeldet. Dein Container läuft noch, aber es geht nicht auf Anfragen.

Dieses Szenario kann für Betriebsteams, die mit Docker arbeiten, unangenehm sein. Nächste, So verwenden Sie die Systemdiagnosefunktion von Docker, um genaue Daten zur Verfügbarkeit Ihrer Dienste zu erhalten.

So funktionieren Gesundheitschecks

Gesundheitschecks erlauben einen Container, um die Verfügbarkeit Ihres Workloads anzuzeigen. Dies wird davon unterschieden, ob der Behälter in Eile. Wenn Ihre Datenbank nicht mehr funktioniert, Ihr API-Server kann Anfragen nicht verarbeiten, auch wenn Ihr Docker-Container noch läuft.

Dies führt zu nicht hilfreichen Erfahrungen bei der Fehlerbehebung. Eine einfache docker ps würde den Container als verfügbar melden. Das Hinzufügen einer Systemdiagnose erweitert die docker ps Ausgabe, um den wahren Zustand des Containers einzuschließen.

Konfigurieren Sie Container-Zustandsprüfungen in Ihrem Dockerfile. Dies akzeptiert einen Befehl, den der Docker-Daemon jedes Mal ausführen wird 30 Sekunden. Docker verwendet den Exit-Code des Befehls, um den Zustand seines Containers festzulegen:

  • 0 – Der Behälter ist gesund und funktioniert normal.
  • 1 – Der Behälter ist nicht gesund; die Arbeitsbelastung funktioniert möglicherweise nicht.
  • 2 – Dieser Statuscode ist von Docker reserviert und sollte nicht verwendet werden.

Wann HEALTHCHECK ist in einem Dockerfile vorhanden, Sie werden die Gesundheit des Behälters im STATUS Spalte, wenn du rennst docker ps.

Der Zustand wird beim Erstellen von Containern nicht sofort überprüft. Status wird angezeigt als starting bevor die erste Prüfung durchgeführt wird. Dies gibt dem Container Zeit, alle Startaufgaben auszuführen. Ein Container mit einer bestandenen Gesundheitsprüfung wird angezeigt als healthy; zeigt einen fehlerhaften Behälter an unhealthy.

Schreiben von Statusprüfbefehlen

Container-Zustandsprüfungen werden mit dem Befehl HEALTHCHECK Anweisung in Ihrem Dockerfile. Sie müssen einen Statusprüfungsbefehl verwenden, der für Ihren Container geeignet ist. Für Webserver, curl bietet Ihnen eine einfache Möglichkeit, eine grundlegende Bereitschaftsprüfung durchzuführen. Pingen eines bekannten Endpunkts, der verfügbar sein sollte, wenn Ihr Dienst aktiv ist.

VON nginx:latest
HEALTHCHECK CMD curl --fail http://localhost/api/healthcheck || Ausfahrt 1

In diesem Beispiel würde der Container als fehlerhaft markiert, wenn Ihr Server /api/healthcheck der Endpunkt hat einen Fehlerstatus ausgegeben.

Sie können verwenden docker inspect um das Ergebnis der Integritätsprüfungsbefehle anzuzeigen. Dies ist nützlich, wenn Sie Ihr debuggen HEALTHCHECK Anweisung.

docker inspect --format="{{json .State.Health}}" mein-container

Ersetzen my-container mit der Identifikation oder dem Namen des Containers, den Sie inspizieren möchten. Diese Details werden in angezeigt docker ps Produktion.

Anpassung des Zustandschecks

Docker ermöglicht es Ihnen, die Häufigkeit der Systemdiagnosen anzupassen. Sie können auch die Kriterien ändern, die einen Container als fehlerhaft markieren.

Es stehen vier Optionen zur Verfügung:

  • --interval – Bestimmen Sie die Zeit zwischen den Gesundheitschecks. Dadurch können Sie den Standardwert von überschreiben 30 Sekunden. Verwenden Sie ein höheres Intervall, um die Zeit zwischen den Überprüfungen zu verlängern. Dies ist hilfreich, wenn Sie einen Dienst mit niedriger Priorität haben, bei dem regelmäßige Systemdiagnosen die Leistung beeinträchtigen können. Verwenden Sie eine regelmäßigere Frequenz für kritische Dienste.
  • --start-period – Legen Sie die Dauer nach dem Start eines Containers fest, in der Systemdiagnosen ignoriert werden sollen. Der Befehl wird weiter ausgeführt, aber ein falscher Zustand wird nicht gezählt. Dies gibt den Containern Zeit, die Startvorgänge abzuschließen.
  • --retries – Auf diese Weise können Sie mehrere aufeinanderfolgende Fehler erfordern, bevor ein Container als . markiert wird unhealthy. Die Standardeinstellung ist 3. Wenn eine Integritätsprüfung fehlschlägt, die nächste jedoch besteht, der Container geht nicht an unhealthy. Es wird nach drei aufeinanderfolgenden fehlgeschlagenen Überprüfungen ungesund.
  • --timeout – Bestimmen Sie die Wartezeit für Integritätsprüfungsbefehle. Docker behandelt die Überprüfung als fehlgeschlagen, wenn der Befehl nicht innerhalb dieses Zeitraums beendet wird.

Die Alternativen werden wie Flaggen an die HEALTHCHECK Anweisung. Geben Sie sie vor dem Befehl zur Statusüberprüfung an:

HEALTHCHECK --interval=60s --retries=5 CMD curl --fail http://Localhost || Ausfahrt 1

Diese Einstellung weist Docker an, curl jede einzelne 60 Sekunden. Der Container wird als fehlerhaft markiert, wenn fünf aufeinanderfolgende Tests einen Exit-Code ungleich Null haben.

Befehlsformat

das HEALTHCHECK die Befehlssyntax unterstützt ein einfaches CMD oder ein Einstiegspunkt-Stil exec Ausbildung. Du kannst auch passieren NONE Anstatt von CMD Gesundheitschecks deaktivieren:

GESUNDHEITSCHECK KEINE

Auf diese Weise können Sie Integritätsprüfungen Ihres Basisimages unterbinden. Jeder HEALTHCHECK Anweisung überschreibt jede vorherige Anweisung in Ihren Bildebenen.

Was ist mit Docker Compose??

Docker Compose unterstützt auch Zustandsprüfungsdefinitionen. Füge hinzu ein healthcheck Abschnitt zu Ihren Diensten :.

Ausführung: "3"
Dienstleistungen:
  App:
    Bild: nginx:neueste
    Häfen:
      - 80:80
    Gesundheitskontrolle:
      Prüfung: curl --fail http://Localhost || Ausfahrt 1
      Intervall: 10S
      wiederholt: 5
      start_periode: 5S
      Auszeit: 10S

das test Taste setzt den auszuführenden Befehl. Die anderen Schlüssel werden den von Dockerfile akzeptierten Parametern zugeordnet HEALTHCHECK Anweisung.

Zusammenfassung

Bestimmen Sie a HEALTHCHECK Die Anweisung erleichtert die Diagnose eines sich schlecht benehmenden Behälters. Sie können die Bereitschaft Ihrer Arbeitslast unabhängig vom Status verfolgen “in Aktion” des Containers.

Zustandsprüfungen werden von jedem Befehl unterstützt, der a ausgibt 0 Ö 1 Exit-Code. Sie können allgemeine Befehle verwenden wie curl und ping um Datenbanken und Webservices zu inspizieren. Für erweiterte Kontrolle, schreibe ein spezielles Skript und füge es in deine Bilder ein.

Abonniere unseren Newsletter

Wir senden Ihnen keine SPAM-Mail. Wir hassen es genauso wie du.