Maison >développement back-end >Golang >Pourquoi mon client gRPC ne parvient-il pas à se connecter à un serveur Go dans un conteneur Docker ?

Pourquoi mon client gRPC ne parvient-il pas à se connecter à un serveur Go dans un conteneur Docker ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-21 11:55:12889parcourir

Why Does My gRPC Client Fail to Connect to a Go Server in a Docker Container?

Connexion au serveur Go GRPC exécuté dans un conteneur Docker local

Problème :

Lors de la tentative pour connecter un client gRPC à un serveur Go gRPC exécuté dans un conteneur Docker, une erreur est rencontré :

transport: http2Client.notifyError got notified that the client transport was broken EOF.
FATA[0000] rpc error: code = Internal desc = transport is closing

Solution :

Le problème survient lorsque le serveur gRPC est configuré pour écouter un nom d'hôte ou une adresse IP spécifique, tel que localhost. Dans Docker, l'adresse localhost fait uniquement référence aux connexions de bouclage provenant du conteneur lui-même.

Pour résoudre ce problème, le serveur doit être configuré pour écouter toutes les adresses IP disponibles du conteneur. Ceci peut être réalisé en changeant le point de terminaison d'écoute de :

endpoint := "localhost:51672"

à :

endpoint := ":51672"

En utilisant ":" comme adresse d'écoute, le serveur se liera à toutes les interfaces et IP adresses dans le conteneur, permettant de transmettre et d'établir des connexions externes.

Supplémentaires Informations :

  • Docker crée des règles iptables pour transférer les connexions vers les ports exposés dans les conteneurs.
  • Les adresses IP attribuées aux conteneurs peuvent être visualisées à l'aide de la commande ip addr ls.
  • Lors de l'exécution du client dans le conteneur, il peut se connecter avec succès au serveur car le client et le serveur sont sur le même réseau interface.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn