Wie erhalte ich Containerprotokolle mit Golang? (Fehler)
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) }
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) } }
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) } }
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!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



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

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

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

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

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

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)

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 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
