> 백엔드 개발 > Golang > 내 gRPC 클라이언트가 Docker 컨테이너의 Go 서버에 연결하지 못하는 이유는 무엇입니까?

내 gRPC 클라이언트가 Docker 컨테이너의 Go 서버에 연결하지 못하는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-21 11:55:12
원래의
888명이 탐색했습니다.

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

로컬 Docker 컨테이너에서 실행되는 Go GRPC 서버에 연결

문제:

시도할 때 Docker 컨테이너 내에서 실행되는 Go gRPC 서버에 gRPC 클라이언트를 연결하려면 오류가 발생합니다. 발생:

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

해결 방법:

gRPC 서버가 localhost와 같은 특정 호스트 이름 또는 IP 주소를 수신하도록 구성되면 문제가 발생합니다. Docker 내에서 로컬 호스트 주소는 컨테이너 자체 내에서 발생하는 루프백 연결만 참조합니다.

이 문제를 해결하려면 컨테이너의 사용 가능한 모든 IP 주소를 수신하도록 서버를 구성해야 합니다. 이는 수신 엔드포인트를

endpoint := "localhost:51672"
로그인 후 복사

에서 다음으로 변경하여 달성할 수 있습니다.

endpoint := ":51672"
로그인 후 복사

":"를 수신 주소로 사용하면 서버가 모든 인터페이스와 IP에 바인딩됩니다. 컨테이너 내의 주소를 사용하여 외부 연결을 전달하고 설정할 수 있습니다.

추가 정보:

  • Docker는 컨테이너 내의 노출된 포트에 연결을 전달하기 위해 iptables 규칙을 생성합니다.
  • 컨테이너에 할당된 IP 주소는 ip addr ls 명령을 사용하여 볼 수 있습니다.
  • 컨테이너 내에서 클라이언트를 실행하면 클라이언트와 서버가 모두 동일한 네트워크 내에 있으므로 성공적으로 서버에 연결할 수 있습니다. 인터페이스.

위 내용은 내 gRPC 클라이언트가 Docker 컨테이너의 Go 서버에 연결하지 못하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿