


Comment obtenir les journaux de conteneurs à l'aide de Golang ? (erreur)
l'éditeur php Xigua vous propose un guide pratique sur la façon d'utiliser Golang pour obtenir les logs des conteneurs. Dans le développement d'applications conteneurisées, les journaux sont très importants, car ils peuvent nous aider à localiser et à résoudre rapidement les problèmes. Cet article explique comment utiliser Golang pour écrire du code, obtenir les informations de journal du conteneur via l'API Docker et gérer les erreurs courantes. Que vous soyez un débutant ou un développeur expérimenté, cet article vous fournira des conseils utiles et des exemples de code pour vous aider à mieux utiliser Golang pour obtenir les journaux de conteneurs. Commençons!
Contenu de la question
J'essaie d'écrire un logiciel de surveillance Docker en utilisant Golang.
Mon code ressemble à ceci :
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) }
Le problème est que l'exécution du code ci-dessus s'arrête à l'instruction fmt.println(buf.readfrom(out))
. Le code fonctionnait, mais du coup il ne fonctionne plus. Soit il s'arrête sans erreur, soit il renvoie une chaîne vide.
Le client dont j'essaie de collecter les journaux est également écrit par moi-même et ressemble à ceci :
package main import ( "log" "time" ) func main() { for i := 0; i > -1; i++ { log.Output(1, "Hello World logged!") time.Sleep(time.Minute) } }
J'ai essayé de déboguer et d'inspecter les variables mais je n'arrive tout simplement pas à trouver la source du problème.
Solution de contournement
Je ne suis vraiment pas sûr car je n'ai aucun journal d'erreurs pour confirmer mon hypothèse. Cependant, lorsque containerslogs renvoie un flux (io.readcloser), est-il possible que le flux lui-même n'ait pas été fermé ?
Si possible, pourriez-vous d'abord faire un essai pour tester cette théorie en ajoutant un délai d'attente et en l'enregistrant après chaque petite durée ?
Une façon possible est
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) } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Snap est un gestionnaire de packages externe conçu pour les systèmes Linux qui vous offre un moyen pratique d'installer des applications conteneurisées. Snap vous permet de télécharger et d'installer facilement des packages sans vous soucier de l'installation de dépendances supplémentaires. Le gestionnaire résout automatiquement les dépendances requises par le package, garantissant ainsi le bon fonctionnement du package sur votre système. Snap complète le gestionnaire de packages natif apt, vous offrant une autre option pour installer et exécuter des applications sur votre système. Dans ce guide, vous trouverez un guide complet sur la façon d'installer Snap sur Debian12. Aperçu : Comment installer Snap sur Debian12 Comment trouver la disponibilité des paquets sur Snap Comment trouver des informations sur les paquets sur Snap

J'essaie de déboguer docker-compose, ce fichier Go, pour résoudre un problème (ceci). Pour ce faire, j'ai configuré un débogueur GoLang gorunmain.go-f/.../project_root/docker-compose.yml-f/.../project_root/folder1/docker-compose.ymlconfig. La sortie est comme prévu, configuration fusionnée Pour une raison quelconque, je ne trouve pas les fichiers de configuration définis dans le code, bien qu'ils doivent être définis quelque part car le résultat correspond aux fichiers de configuration correctement fusionnés. Je soupçonne qu'ils doivent être définis

Les langages de programmation pris en charge par PyCharm incluent : Python (principal langage pris en charge) JavaScript (y compris Node.js et React) HTML/CSSTypeScriptJavaC/C++GoSQLDockerKotlinRust

À l'ère actuelle de développement technologique rapide, les langages de programmation poussent comme des champignons après la pluie. L'un des langages qui a beaucoup retenu l'attention est le langage Go, apprécié par de nombreux développeurs pour sa simplicité, son efficacité, sa sécurité de concurrence et d'autres fonctionnalités. Le langage Go est connu pour son écosystème solide avec de nombreux excellents projets open source. Cet article présentera cinq projets open source sélectionnés en langage Go et amènera les lecteurs à explorer le monde des projets open source en langage Go. KubernetesKubernetes est un moteur d'orchestration de conteneurs open source pour l'automatisation

En tant qu'ingénieur réseau, lorsque vous envisagez d'installer Linux pour votre travail, vous pourriez être confronté à une question : parmi les milliers de distributions Linux disponibles, laquelle devriez-vous choisir ? Ne vous inquiétez pas, vous n'êtes pas seul. Linux est un système d'exploitation de choix pour les ingénieurs réseau, et il existe de nombreuses distributions adaptées aux tâches liées au réseau. Si vous êtes ingénieur réseau, vous souhaiterez peut-être savoir quelles distributions offrent les meilleures fonctionnalités pour votre travail. Voici six excellentes distributions Linux largement recommandées par les ingénieurs réseau : 1. Fedora Parmi les nombreuses distributions Linux, Fedora est l'une des plus respectées parmi les ingénieurs réseau, et la raison est simple. Fedora est une distribution open source équivalente à Red Hat Enterprise

Le langage Go est utilisé dans les domaines suivants : développement back-end (microservices, systèmes distribués) cloud computing (applications cloud natives, applications conteneurisées) traitement de données (analyse de données, moteurs big data) réseaux et systèmes distribués (serveurs proxy, cache de distribution) outils système (système d'exploitation, utilitaires)

Dans un environnement de développement logiciel en évolution rapide, des versions rapides sont essentielles. Les pipelines CI/CD (Intégration continue et déploiement continu) automatisent le processus de déploiement et simplifient le déplacement du code du développement à la production. Cet article se concentre sur la configuration d'un pipeline CI/CD entièrement automatisé à l'aide de Jenkins, Helm et Kubernetes dans un environnement Kubernetes, y compris : la configuration de l'environnement, les étapes d'automatisation des constructions de pipeline et le déploiement dans des environnements de développement, de transfert et de production. En mettant en œuvre ce processus automatisé, les développeurs peuvent se concentrer sur le développement du code tout en laissant la gestion complexe de l'infrastructure à l'automatisation, améliorant ainsi l'efficacité et la fiabilité du déploiement.

La large application de Linux dans le domaine du cloud computing Avec le développement et la vulgarisation continus de la technologie du cloud computing, Linux, en tant que système d'exploitation open source, joue un rôle important dans le domaine du cloud computing. En raison de leur stabilité, de leur sécurité et de leur flexibilité, les systèmes Linux sont largement utilisés dans diverses plates-formes et services de cloud computing, fournissant une base solide pour le développement de la technologie du cloud computing. Cet article présentera le large éventail d'applications de Linux dans le domaine du cloud computing et donnera des exemples de code spécifiques. 1. Technologie de virtualisation d'applications de Linux dans la plate-forme de cloud computing Technologie de virtualisation
