Java 连接到运行在docker容器内的GRPC服务器
我想尝试从主机上的docker容器中运行GRPC服务器。我想看看是否可以通过在“主机”网络模式下运行它来获得更好的性能。我是从java开始的Java 连接到运行在docker容器内的GRPC服务器,java,docker,networking,grpc,Java,Docker,Networking,Grpc,我想尝试从主机上的docker容器中运行GRPC服务器。我想看看是否可以通过在“主机”网络模式下运行它来获得更好的性能。我是从java开始的 CreateContainerResponse container = dockerClient.createContainerCmd("darthshana/lostvictoryserver:0.0.1-SNAPSHOT") .withVolumes(volume1) .withBinds(new Bind("/home/darthsh
CreateContainerResponse container = dockerClient.createContainerCmd("darthshana/lostvictoryserver:0.0.1-SNAPSHOT")
.withVolumes(volume1)
.withBinds(new Bind("/home/darthshana/gameEngine/lostVictoriesServer.properties", volume1))
.withExposedPorts(tcp5055)
.withPortBindings(portBindings)
.withNetworkMode("host")
.withEnv("GAME_NAME="+gameName, "GAME_PORT=5055")
.exec();
这将导致以下docker容器启动
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b982b240ada2 darthshana/lostvictoryserver:0.0.1-SNAPSHOT "/usr/bin/java -ja..." About a minute ago Up About a minute angry_curie
在主机上,我可以看到它暴露了正确的端口
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp6 0 0 :::5055 :::* LISTEN -
我在主机上有一个防火墙规则
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:5055 state NEW
允许我从外部连接到GRPC服务器。。一切都很好!
然而。。。。
由于某些原因,我无法从同一台主机内连接到grpc服务器。。我正试图从主机上运行的另一个java进程(不是docker容器)中执行此操作。。我试过了
ManagedChannel managedChannel = ManagedChannelBuilder.forAddress("......", game.getPort())
.usePlaintext(true)
.build();
在“…”字符串localhost 127.0.0.1中,以及我在主机外部成功使用的服务器的外部ip中。。但它们都不工作,GRPC呼叫已发出,但从未到达GRPC服务器,也不会返回。。我没有得到任何错误。但是,如果我杀死docker容器,我会得到错误
2017-10-12 19:03:29.484 ERROR 3366 --- [io-8080-exec-10] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is io.grpc.StatusRuntimeException: INTERNAL: Connection closed with unknown cause] with root cause
io.grpc.StatusRuntimeException: INTERNAL: Connection closed with unknown cause
at
io.grpc.stub.ClientCalls.toStatusRuntimeException
(ClientCalls.java:210) ~[grpc-stub-1.6.1.jar!/:1.6.1]
好像连接成功了,但电话没有接通。
我尝试过从主机外部对docker内部运行的同一个grpc服务器进行相同的调用,效果很好
为什么我不能从本地主机连接到它?如果您需要在同一网络上运行具有
--net
属性的容器,请提供任何指导。但我现在自己也在努力解决这个问题:D