Мой местный (без докера) был в порядке и работал без проблем.
МЕСТНАЯ НАСТРОЙКА работает нормально.
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)
Как вы думаете, правильна ли настройка докера? Если тогда я могу искать проблему где-то еще
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).
@ Dazwilkin Я ценю любую помощь, которую я могу получить. Я сейчас путешествую и, надеюсь, вы сможете прочитать это сообщение, поскольку я не могу комментировать из-за отсутствия репутации в этом аккаунте. Я попробовал ваше предложение перед отъездом, вместо localhost использовал сотрудника. Я также добавил ссылки и зависимости от переменных, но gRPC все еще не удалось.
Я продолжал изучать сети в Docker, поэтому мне было интересно, нужно ли мне создавать какую-то сеть. Квест продолжается.
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.