Java 连接到运行在docker容器内的GRPC服务器

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

我想尝试从主机上的docker容器中运行GRPC服务器。我想看看是否可以通过在“主机”网络模式下运行它来获得更好的性能。我是从java开始的

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