Heim >Backend-Entwicklung >Golang >Warum kann mein gRPC-Client keine Verbindung zu einem Go-Server in einem Docker-Container herstellen?

Warum kann mein gRPC-Client keine Verbindung zu einem Go-Server in einem Docker-Container herstellen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-21 11:55:12892Durchsuche

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

Verbindung zum Go GRPC-Server herstellen, der im lokalen Docker-Container ausgeführt wird

Problem:

Beim Versuch Beim Verbinden eines gRPC-Clients mit einem Go-gRPC-Server, der in einem Docker-Container ausgeführt wird, tritt ein Fehler auf aufgetreten:

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

Lösung:

Das Problem tritt auf, wenn der gRPC-Server so konfiguriert ist, dass er einen bestimmten Hostnamen oder eine bestimmte IP-Adresse überwacht, z. B. localhost. Innerhalb von Docker bezieht sich die Localhost-Adresse nur auf Loopback-Verbindungen, die aus dem Container selbst stammen.

Um dieses Problem zu beheben, sollte der Server so konfiguriert sein, dass er alle verfügbaren IP-Adressen des Containers überwacht. Dies kann durch Ändern des Listenendpunkts von:

endpoint := "localhost:51672"

in:

endpoint := ":51672"

durch die Verwendung von „:“ als Listenadresse erreicht werden, bindet der Server an alle Schnittstellen und IP Adressen innerhalb des Containers, sodass externe Verbindungen weitergeleitet und aufgebaut werden können.

Zusätzlich Informationen:

  • Docker erstellt iptables-Regeln, um Verbindungen an exponierte Ports innerhalb von Containern weiterzuleiten.
  • Containern zugewiesene IP-Adressen können mit dem Befehl ip addr ls angezeigt werden.
  • Wenn der Client im Container ausgeführt wird, kann er erfolgreich eine Verbindung zum Server herstellen, da sich sowohl der Client als auch der Server im selben Netzwerk befinden Schnittstelle.

Das obige ist der detaillierte Inhalt vonWarum kann mein gRPC-Client keine Verbindung zu einem Go-Server in einem Docker-Container herstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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