我的本地(沒有 docker)很好,工作沒有任何問題。本地設置工作正常。Server-Jar:運行于 8081Client-War:運行在 8000,可以毫無問題地連接到 Server Jar。DOCKER 設置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.jarclient: 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: - employeedepends_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 調用時拋出錯誤。您認為 docker 設置正確嗎?如果那么我可以在其他地方尋找問題
1 回答

Qyouu
TA貢獻1786條經驗 獲得超11個贊
看到這個人為的例子:
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為localhostin client,則客戶端會嘗試wget對自己執行命令,但會失敗。
因為server發布8888到主機,當 Docker Compose 啟動時,從主機(?。憧梢詗get http://localhost:8888并且這將起作用(200)。
添加回答
舉報
0/150
提交
取消