我有go grpc服务.我在mac电脑上开发sierra.在本地针对服务运行grpc客户端时,一切正常,但在docker容器中针对同一服务运行同一客户端时,我会遇到以下错误:
transport: http2Client.notifyError got notified that the client transport was broken EOF.
FATA[0000] rpc error: code = Internal desc = transport is closing
这是我的 docker 文件:
FROM golang:1.7.5
RUN mkdir -p /go/src/github.com/foo/bar
WORKDIR /go/src/github.com/foo/bar
COPY . /go/src/github.com/foo/bar
# ONBUILD RUN go-wrapper download
RUN go install
ENTRYPOINT /go/bin/bar
EXPOSE 51672
我用来构建映像的命令如下:
docker build -t bar .
我用来启动 docker 容器的命令如下:
docker run -p 51672:51672 --name bar-container bar
其他信息:
- 客户端程序在停靠器容器内运行良好
- 连接到常规rest端点可以正常工作(http2,grpc相关?)
-
在OS X中运行
lsof
命令会产生以下结果$lsof -i | grep 51672 com.docke 984 oldDave 21u IPv4 0x72779547e3a32c89 0t0 TCP *:51672 (LISTEN) com.docke 984 oldDave 22u IPv6 0x72779547cc0fd161 0t0 TCP localhost:51672 (LISTEN)
-
以下是我的服务器代码片段:
server := &Server{} endpoint := "localhost:51672" lis, err := net.Listen("tcp", endpoint) if err != nil { log.Fatalf("failed to listen: %v", err) } s := grpc.NewServer(grpc.Creds(creds)) pb.RegisterExpServiceServer(s, server) // Register reflection service on gRPC server. reflection.Register(s) log.Info("Starting Exp server: ", endpoint) if err := s.Serve(lis); err != nil { log.Fatalf("failed to serve: %v", err) }