No se puede conectar al servidor Go GRPC que se ejecuta en el contenedor Docker local
Tengo un servicio go grpc. Estoy desarrollando en una mac, sierra. Cuando ejecuto un cliente grpc contra el servicio localmente, todo está bien, pero cuando ejecuto el mismo cliente contra el mismo servicio en el contenedor docker obtengo este error:
transport: http2Client.notifyError got notified that the client transport was broken EOF.
FATA[0000] rpc error: code = Internal desc = transport is closing
Este es mi archivo acoplable:
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
mi comando para construir la imagen:
docker build -t bar .
mi comando para lanzar el contenedor docker:
docker run -p 51672:51672 --name bar-container bar
Otra información:El programa cliente funciona bien desde el contenedor acoplableconectarse a un punto final de reposo normal funciona bien (http2, ¿relacionado con grpc?)corriendo ellsof
comando en OS X produce estos 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)
Aquí hay un fragmento de mi código de 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)
}