Мой местный (без докера) был в порядке и работал без проблем.

МЕСТНАЯ НАСТРОЙКА работает нормально.

Server-Jar: работает на 8081

Client-War: работает на 8000 и может без проблем установить соединение с Server Jar.


НАСТРОЙКА ДОКЕРА docker-compose.yml

Сервер

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();
}

Код подключения клиента.

ManagedChannel channel = ManagedChannelBuilder.forTarget(env.get("EMPLOYEE_HOST")).usePlaintext().build();
EmployeeServiceGrpc.EmployeeServiceBlockingStub employee = EmployeeServiceGrpc.newBlockingStub(channel);

Ошибка . Выдается, когда я выполняю вызов gRPC.

Вызывается: io.grpc.StatusRuntimeException: UNKNOWN при развертывании getUnchecked (ClientCalls.java:216) при развертывании. Service.war // io.grpc.stub.ClientCalls.blockingUnaryCall (ClientCalls.java:141)

Как вы думаете, правильна ли настройка докера? Если тогда я могу искать проблему где-то еще

1
AppDeveloper 17 Авг 2019 в 21:19

2 ответа

Лучший ответ

Посмотрите этот надуманный пример:

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, но использует server в качестве адреса хоста для разрешения в соответствующий (Nginx) контейнер.

Если вы замените server на localhost в client, клиент попытается выполнить команду wget против себя, и это не получится.

Поскольку server публикует 8888 на хосте, когда Docker Compose работает, с хоста (!) Вы можете wget http://localhost:8888, и это будет работать (200).

0
DazWilkin 19 Авг 2019 в 19:13

@ Dazwilkin Я ценю любую помощь, которую я могу получить. Я сейчас путешествую и, надеюсь, вы сможете прочитать это сообщение, поскольку я не могу комментировать из-за отсутствия репутации в этом аккаунте. Я попробовал ваше предложение перед отъездом, вместо localhost использовал сотрудника. Я также добавил ссылки и зависимости от переменных, но gRPC все еще не удалось.

Я продолжал изучать сети в Docker, поэтому мне было интересно, нужно ли мне создавать какую-то сеть. Квест продолжается.

0
HelloWorld 18 Авг 2019 в 14:42