Não é possível conectar-se ao servidor Go GRPC em execução no contêiner Docker local
Eu tenho um serviço go grpc. Estou desenvolvendo em um Mac, Sierra. Ao executar um cliente grpc no serviço localmente, tudo está bem, mas ao executar o mesmo cliente no mesmo serviço no contêiner do docker, recebo este erro:
transport: http2Client.notifyError got notified that the client transport was broken EOF.
FATA[0000] rpc error: code = Internal desc = transport is closing
este é o meu arquivo 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
meu comando para construir a imagem:
docker build -t bar .
meu comando para iniciar o contêiner do docker:
docker run -p 51672:51672 --name bar-container bar
Outras informações:o programa cliente executa bem a partir do contêiner do dockerconectar-se a um endpoint de descanso regular funciona bem (http2, relacionado ao grpc?)executando olsof
comando no OS X produz esses resultados
$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)
Aqui está um trecho do código do meu servidor:
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)
}