Inhaltsverzeichnis
Frageninhalt
Workaround
Heim Backend-Entwicklung Golang Wie erhalte ich Containerprotokolle mit Golang? (Fehler)

Wie erhalte ich Containerprotokolle mit Golang? (Fehler)

Feb 08, 2024 pm 09:09 PM
容器化应用

如何使用 Golang 获取容器日志? (错误)

php-Editor Xigua bietet Ihnen eine praktische Anleitung zur Verwendung von Golang zum Abrufen von Containerprotokollen. Bei der Entwicklung von Containeranwendungen sind Protokolle sehr wichtig, da sie uns helfen können, Probleme schnell zu lokalisieren und zu lösen. In diesem Artikel erfahren Sie, wie Sie mit Golang Code schreiben, die Protokollinformationen des Containers über die Docker-API abrufen und häufige Fehler behandeln. Unabhängig davon, ob Sie ein Neuling oder ein erfahrener Entwickler sind, bietet Ihnen dieser Artikel nützliche Tipps und Beispielcode, die Ihnen helfen, Golang besser zum Abrufen von Containerprotokollen zu nutzen. Lass uns anfangen!

Frageninhalt


Ich versuche, Docker-Überwachungssoftware mit Golang zu schreiben.

Mein Code sieht so aus:

package main

import (
    "bytes"
    "context"
    "fmt"
    "time"

    "github.com/docker/docker/api/types"
    "github.com/docker/docker/client"
)

func main() {
    ctx := context.background()

    cli, err := client.newclientwithopts(client.fromenv)
    if err != nil {
        panic(err)
    }

    containers, err := cli.containerlist(ctx, types.containerlistoptions{})
    if err != nil {
        panic(err)
    }

    for _, container := range containers {
        out, err := cli.containerlogs(ctx, container.id, types.containerlogsoptions{
            showstderr: true,
            showstdout: true,
            timestamps: false,
            follow:     true,
            tail:       "40"})

        if err != nil {
            panic(err)
        }

        fmt.println("the \"" + container.image + "\" container, with the id \"" + container.id + "\" logged: ")
        fmt.println()

        buf := new(bytes.buffer)

        fmt.println(buf.readfrom(out))

        fmt.println(buf.string())
    }
    time.sleep(time.second * 3)
}
Nach dem Login kopieren

Das Problem besteht darin, dass die Ausführung des obigen Codes bei der fmt.println(buf.readfrom(out))-Anweisung stoppt. Früher hat der Code funktioniert, aber plötzlich funktioniert er nicht mehr. Es stoppt entweder ohne Fehler oder gibt eine leere Zeichenfolge zurück.

Der Client, von dem ich Protokolle sammeln möchte, wurde ebenfalls von mir selbst geschrieben und sieht folgendermaßen aus:

package main

import (
    "log"
    "time"
)

func main() {
    for i := 0; i > -1; i++ {
        log.Output(1, "Hello World logged!")
        time.Sleep(time.Minute)
    }
}
Nach dem Login kopieren

Ich habe versucht, Variablen zu debuggen und zu überprüfen, aber ich kann die Ursache des Problems einfach nicht finden.


Workaround


Ich bin mir wirklich nicht sicher, da ich keine Fehlerprotokolle habe, die meine Annahme bestätigen könnten. Wenn Containerlogs jedoch einen Stream (io.readcloser) zurückgibt, ist es dann möglich, dass der Stream selbst nicht geschlossen wurde?

Könnten Sie, wenn möglich, zunächst einen Probelauf durchführen, um diese Theorie zu testen, indem Sie eine Zeitüberschreitung hinzufügen und diese nach jeder kurzen Dauer protokollieren?

Ein möglicher Weg ist

select {
case <-time.After(5 * time.Second):
    fmt.Println("Timeout exceeded while reading container logs")
case <-ctx.Done():
    fmt.Println("Context cancelled while reading container logs")
case b := <-out:
    if b != nil {
        buf.Write(b)
    }
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie erhalte ich Containerprotokolle mit Golang? (Fehler). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So installieren Sie Snap unter Debian 12 So installieren Sie Snap unter Debian 12 Mar 20, 2024 pm 08:51 PM

Snap ist ein externer Paketmanager für Linux-Systeme, der Ihnen eine bequeme Möglichkeit zur Installation von Containeranwendungen bietet. Mit Snap können Sie Pakete einfach herunterladen und installieren, ohne sich Gedanken über die Installation zusätzlicher Abhängigkeiten machen zu müssen. Der Manager löst automatisch die für das Paket erforderlichen Abhängigkeiten auf und stellt so sicher, dass das Paket reibungslos auf Ihrem System läuft. Snap ergänzt den nativen apt-Paketmanager und bietet Ihnen eine weitere Möglichkeit zum Installieren und Ausführen von Anwendungen auf Ihrem System. In dieser Anleitung finden Sie eine vollständige Anleitung zur Installation von Snap unter Debian12. Übersicht: So installieren Sie Snap auf Debian12. So finden Sie die Paketverfügbarkeit auf Snap. So finden Sie Informationen zu Paketen auf Snap

Wie debugge ich Docker-Compose? Wo ist der Konfigurationspfad eingestellt? Wie debugge ich Docker-Compose? Wo ist der Konfigurationspfad eingestellt? Feb 10, 2024 pm 12:48 PM

Ich versuche, Docker-Compose, diese Go-Datei, zu debuggen, um ein Problem (dieses) zu lösen. Dazu habe ich einen GoLang-Debugger eingerichtet: gorunmain.go-f/.../project_root/docker-compose.yml-f/.../project_root/folder1/docker-compose.ymlconfigs Ausgabe ist wie erwartet, zusammengeführte Konfiguration Aus irgendeinem Grund kann ich die im Code festgelegten Konfigurationsdateien nicht finden, obwohl sie irgendwo festgelegt werden müssen, da die Ausgabe die korrekt zusammengeführten Konfigurationsdateien sind. Ich vermute, dass sie eingestellt werden müssen

Welche Sprachen unterstützt Pycharm? Welche Sprachen unterstützt Pycharm? Apr 18, 2024 am 10:57 AM

Zu den von PyCharm unterstützten Programmiersprachen gehören: Python (hauptunterstützte Sprache) JavaScript (einschließlich Node.js und React) HTML/CSSTypeScriptJavaC/C++GoSQLDockerKotlinRust

Fünf ausgewählte Open-Source-Projekte in der Go-Sprache, mit denen Sie die Welt der Technologie erkunden können Fünf ausgewählte Open-Source-Projekte in der Go-Sprache, mit denen Sie die Welt der Technologie erkunden können Jan 30, 2024 am 09:08 AM

Im heutigen Zeitalter der rasanten technologischen Entwicklung schießen Programmiersprachen wie Pilze nach einem Regenschauer aus dem Boden. Eine der Sprachen, die viel Aufmerksamkeit erregt hat, ist die Go-Sprache, die von vielen Entwicklern wegen ihrer Einfachheit, Effizienz, Parallelitätssicherheit und anderen Funktionen geliebt wird. Die Go-Sprache ist für ihr starkes Ökosystem mit vielen hervorragenden Open-Source-Projekten bekannt. In diesem Artikel werden fünf ausgewählte Open-Source-Projekte für die Go-Sprache vorgestellt und der Leser soll die Welt der Open-Source-Projekte für die Go-Sprache erkunden. KubernetesKubernetes ist eine Open-Source-Container-Orchestrierungs-Engine für die Automatisierung

Die 6 besten Linux-Distributionen für Netzwerktechniker Die 6 besten Linux-Distributionen für Netzwerktechniker Feb 05, 2024 pm 05:20 PM

Wenn Sie als Netzwerktechniker über die Installation von Linux für Ihren Job nachdenken, stehen Sie möglicherweise vor der Frage: Welche von den Tausenden verfügbaren Linux-Distributionen sollten Sie wählen? Mach dir keine Sorgen, du bist nicht allein. Linux ist ein gängiges Betriebssystem der Wahl für Netzwerktechniker, und es gibt viele Distributionen, die für netzwerkbezogene Aufgaben geeignet sind. Wenn Sie Netzwerktechniker sind, möchten Sie vielleicht wissen, welche Distributionen die beste Funktionalität für Ihre Arbeit bieten. Im Folgenden sind sechs hervorragende Linux-Distributionen aufgeführt, die von Netzwerktechnikern allgemein empfohlen werden: 1. Fedora Unter den vielen Linux-Distributionen ist Fedora eine der angesehensten unter Netzwerktechnikern, und der Grund ist einfach. Fedora ist eine Open-Source-Distribution, die Red Hat Enterprise entspricht

Was sind die Anwendungsbereiche der Go-Sprachentwicklung? Was sind die Anwendungsbereiche der Go-Sprachentwicklung? Apr 03, 2024 am 11:33 AM

Die Go-Sprache wird in den folgenden Bereichen verwendet: Back-End-Entwicklung (Microservices, verteilte Systeme), Cloud Computing (Cloud-native Anwendungen, Containeranwendungen), Datenverarbeitung (Datenanalyse, Big-Data-Engines), Netzwerke und verteilte Systeme (Proxyserver, Verteilungscache). Systemtools (Betriebssystem, Dienstprogramme)

Automatisieren Sie ganz einfach Ihre CI/CD-Pipeline mit Kubernetes, Helm und Jenkins Automatisieren Sie ganz einfach Ihre CI/CD-Pipeline mit Kubernetes, Helm und Jenkins Apr 02, 2024 pm 04:12 PM

In einer schnelllebigen Softwareentwicklungsumgebung sind schnelle Releases von entscheidender Bedeutung. CI/CD-Pipelines (Continuous Integration und Continuous Deployment) automatisieren den Bereitstellungsprozess und vereinfachen die Bewegung des Codes von der Entwicklung zur Produktion. Dieser Artikel konzentriert sich auf die Einrichtung einer vollständig automatisierten CI/CD-Pipeline mit Jenkins, Helm und Kubernetes in einer Kubernetes-Umgebung, einschließlich: Umgebungseinrichtung, Schritte zur Automatisierung von Pipeline-Builds und Bereitstellung in Entwicklungs-, Staging- und Produktionsumgebungen. Durch die Implementierung dieses automatisierten Prozesses können sich Entwickler auf die Codeentwicklung konzentrieren und gleichzeitig das komplexe Infrastrukturmanagement der Automatisierung überlassen, wodurch die Effizienz und Zuverlässigkeit der Bereitstellung verbessert wird.

Die breite Anwendung von Linux im Bereich Cloud Computing Die breite Anwendung von Linux im Bereich Cloud Computing Mar 20, 2024 pm 04:51 PM

Die breite Anwendung von Linux im Bereich Cloud Computing Mit der kontinuierlichen Weiterentwicklung und Popularisierung der Cloud-Computing-Technologie spielt Linux als Open-Source-Betriebssystem eine wichtige Rolle im Bereich Cloud Computing. Aufgrund seiner Stabilität, Sicherheit und Flexibilität werden Linux-Systeme häufig in verschiedenen Cloud-Computing-Plattformen und -Diensten eingesetzt und bieten eine solide Grundlage für die Entwicklung der Cloud-Computing-Technologie. In diesem Artikel werden die vielfältigen Einsatzmöglichkeiten von Linux im Bereich Cloud Computing vorgestellt und konkrete Codebeispiele gegeben. 1. Anwendungsvirtualisierungstechnologie von Linux in der Virtualisierungstechnologie der Cloud-Computing-Plattform

See all articles