Rumah >pembangunan bahagian belakang >Golang >Mengapa Klien gRPC Saya Gagal Menyambung ke Pelayan Go dalam Bekas Docker?

Mengapa Klien gRPC Saya Gagal Menyambung ke Pelayan Go dalam Bekas Docker?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-21 11:55:12938semak imbas

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

Menyambung ke Pelayan Go GRPC Berjalan dalam Bekas Docker Tempatan

Masalah:

Apabila mencuba untuk menyambungkan klien gRPC ke pelayan Go gRPC yang berjalan dalam bekas Docker, ralat ialah dihadapi:

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

Penyelesaian:

Isu timbul apabila pelayan gRPC dikonfigurasikan untuk mendengar pada nama hos atau alamat IP tertentu, seperti localhost. Dalam Docker, alamat localhost hanya merujuk kepada sambungan gelung balik yang berasal dari dalam bekas itu sendiri.

Untuk menyelesaikan isu ini, pelayan harus dikonfigurasikan untuk mendengar pada semua alamat IP bekas yang tersedia. Ini boleh dicapai dengan menukar titik akhir dengar daripada:

endpoint := "localhost:51672"

kepada:

endpoint := ":51672"

Dengan menggunakan ":" sebagai alamat dengar, pelayan akan mengikat semua antara muka dan IP alamat dalam bekas, membenarkan sambungan luaran dimajukan dan diwujudkan.

Tambahan Maklumat:

  • Docker mencipta peraturan iptables untuk memajukan sambungan ke port terdedah dalam bekas.
  • Alamat IP yang diberikan kepada bekas boleh dilihat menggunakan arahan ip addr ls.
  • Apabila menjalankan klien dalam bekas, ia boleh berjaya menyambung ke pelayan kerana kedua-dua klien dan pelayan berada dalam rangkaian yang sama antara muka.

Atas ialah kandungan terperinci Mengapa Klien gRPC Saya Gagal Menyambung ke Pelayan Go dalam Bekas Docker?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn