Docker容器之间的gRPC通信

时间:2019-08-17 18:19:40

标签: java docker docker-compose grpc grpc-java

我的本​​地人(没有docker)很好并且可以正常工作。

本地设置工作正常。

Server-Jar:,运行于8081

客户端战争:运行速度为8000,可以毫无问题地连接到Server Jar。


DOCKER设置 docker-compose.yml

服务器

git clean -fdq

员工服务器代码

employee:
    image: openjdk:jdk-alpine
    container_name: "employee"
    ports:
      - 9081:8080
      - 9991:9990
      - 65193:65193
    volumes:
      - ./Employee/target/Employee-1.0-SNAPSHOT-jar-with-dependencies.jar:/deployments/Employee-1.0-SNAPSHOT-jar-with-dependencies.jar
    environment:
      - JAVA_OPTS=-agentlib:jdwp=transport=dt_socket,address=0.0.0.0:65193,suspend=n,server=y -Djava.net.preferIPv4Stack=true
      - GRPC_PORT=8080
    command: java -jar /deployments/Employee-1.0-SNAPSHOT-jar-with-dependencies.jar





client:
    image: jboss/wildfly
    container_name: "client"
    ports:
      - 9080:8080
      - 9990:9990
      - 65193:65193
    volumes:
      - ./Service/target/Service.war:/opt/jboss/wildfly/standalone/deployments/Service.war
    environment:
      - JAVA_OPTS=-agentlib:jdwp=transport=dt_socket,address=0.0.0.0:65193,suspend=n,server=y -Djava.net.preferIPv4Stack=true
      - EMPLOYEE_HOST=localhost:9081
    command: >
      bash -c "/opt/jboss/wildfly/bin/add-user.sh admin Admin#007 --silent && /opt/jboss/wildfly/bin/standalone.sh -b 0.0.0.0 -bmanagement 0.0.0.0"
links:
  - employee
depends_on:
  - employee

客户端连接代码。

Server server = ServerBuilder.forPort(Integer.parseInt(env.get("GRPC_PORT")))
        .addService(new Employee())
        .build();
try {
    server.start();
    System.out.println("Server listening at: " + env.get("GRPC_PORT"));
    server.awaitTermination();
} catch (IOException | InterruptedException e) {
    e.printStackTrace();
}

错误,当我进行gRPC调用时抛出。

  

由以下原因引起:io.grpc.StatusRuntimeException:UNKNOWN at   deployment.Service.war // io.grpc.stub.ClientCalls.toStatusRuntimeException(ClientCalls.java:235)     在   部署.Service.war // io.grpc.stub.ClientCalls.getUnchecked(ClientCalls.java:216)     在   deployment.Service.war // io.grpc.stub.ClientCalls.blockingUnaryCall(ClientCalls.java:141)

您认为docker设置正确吗?如果可以的话,我可以在其他地方寻找问题

2 个答案:

答案 0 :(得分:0)

@dazwilkin我很感谢我能得到的任何帮助。我现在正在旅行,希望您能阅读此消息,因为由于该帐户信誉欠佳而无法发表评论。我在离开之前确实尝试过您的建议,而不是使用本地主机的雇员。我还添加了链接和Depends_on变量,但gRPC仍然失败。

我继续研究Docker中的网络,所以我想知道是否需要创建某种网络。任务继续。

答案 1 :(得分:0)

请参阅此人为的示例:

TypeError: Cannot read property 'checkoutLineItemsAdd' of undefined

version: "3" services: server: image: nginx:1.17.3 restart: always container_name: nginx expose: - "80" ports: - 8888:80 client: image: busybox:1.31.0 restart: always depends_on: - server container_name: busybox command: - ash - -c - | while true; do wget --spider http://server:80 2>&1 sleep 5s; done; 通过端口client访问Nginx容器,但是它使用80作为主机地址来解析为适当的(Nginx)容器。

如果要在server中将server替换为localhost,客户端将尝试对其自身执行client命令,这将失败。

由于wgetserver发布到主机,而Docker Compose启动时,您可以从主机(!)进行8888,这将起作用(200)。