【发布时间】:2018-02-14 03:21:50
【问题描述】:
我有一个 gRPC 客户端和一个服务器作为使用 docker-compose 声明的两个 docker 容器。
version: '3.3'
services:
apiserver:
image: golang:latest
container_name: apiserver
expose:
- "3000"
ports:
- "3000:3000"
command: go run cmd/apiserver/main.go
userserver:
image: golang:latest
container_name: userserver
expose:
- "3001"
ports:
- "3001:3001"
command: go run cmd/userserver/main.go
我省略了一些东西,比如卷等,因为我认为它们与问题无关。
当客户端尝试拨号服务器时,我收到错误TLS handshake error from 172.22.0.1:34824: tls: oversized record received with length 21536
服务器(用户服务器):
lis, err := net.Listen("tcp", "userserver:3001")
if err != nil {
logger.Critical(ctx, "failed to listen: %v", err)
}
grpcServer := grpc.NewServer()
userServer := userserver.New()
pb.RegisterDomainServer(grpcServer, userServer)
rpcErr := grpcServer.Serve(lis)
if rpcErr != nil {
logger.Critical(ctx, "failed to serve: %v", rpcErr)
}
客户端(apiserver):
conn, err := grpc.Dial("userserver:3001", grpc.WithInsecure())
if err != nil {
return err
}
defer conn.Close()
client := pb.NewDomainClient(conn)
_, err = client.Dispatch(ctx, &pb.Command{
Name: command,
Payload: payload,
})
信息
客户端是apiserver,userserver是gRPC服务器,之所以叫客户端apiserver是因为它也是http代理。所以apiserver 容器尝试拨打userserver 容器
【问题讨论】:
-
你为什么要从服务器监听 userip?
lis, err := net.Listen("tcp", "userserver:3001")服务器应该注册到它自己的 ip 和/或端口。 More info net pkg -
当你拨号时应该是
apiserver:port -
客户端是
apiserver,userserver是gRPC服务器,之所以叫客户端apiserver是因为它也是http代理。所以apiserver容器尝试拨打userserver容器 -
WithInsecure禁用传输安全性。 -
是的,但我认为我需要它,对吗?我没有使用任何证书,只是想让它在 atm 工作
标签: go docker-compose grpc