Docker: связь между клиентом и сервером - PullRequest
0 голосов
/ 04 июня 2018

Я управляю простым пружинным микросервисным проектом с Docker.У меня есть два проекта: lucky-word-client (на порту 8080) и lucky-word-server (на порту 8001).Но я не могу связать клиента с сервером.Фактически, если lucky-word-client связывается с lucky-word-server, результатом будет слово «Evviva», иначе слово «Default».Мой результат всегда «По умолчанию», но я хочу, чтобы клиент-сервер связывался с словом «Evviva».

Это два класса клиента-счастливчика:

package asw.springcloud.luckyword;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class LuckyWordApplication {

    public static void main(String[] args) {
        SpringApplication.run(LuckyWordApplication.class, args);
    }
}


package asw.springcloud.luckyword;

import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.beans.factory.annotation.Value;

@RestController
public class LuckyWordController {

    @Value("${lucky-word}") 
    private String luckyWord;

    @RequestMapping("/lucky-word")
    public String luckyWord() {
        return "The lucky word is: " + luckyWord; 
    }
}

Этоэто файл application.properties клиента lucky-word:

# application.properties 
# parola fortunata di default (if server is not accessible)
lucky-word=Default

Это файл bootstrap.properties клиента lucky-word:

 # bootstrap.properties 
    spring.application.name=lucky-word 
    # i profili possibili sono italian e english
    spring.profiles.active=italian 
    # oppure: export SPRING_PROFILES_ACTIVE=italian 
    spring.cloud.config.uri=http://localhost:8001

Это файл Dockerfileклиента счастливого слова:

FROM frolvlad/alpine-oraclejdk8 

ADD build/libs/lucky-word-client-0.0.1-SNAPSHOT.jar lucky-word-client.jar

EXPOSE 8080

ENTRYPOINT ["/usr/bin/java", "-Xmx128m", "-Xms128m"]

CMD ["-jar", "-Dspring.profiles.active=italian", "lucky-word-client.jar"]

Это класс сервера счастливого слова:

package asw.springcloud.configserver;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;

@SpringBootApplication
@EnableConfigServer
public class CommonConfigServer {

    public static void main(String[] args) {
        SpringApplication.run(CommonConfigServer.class, args);
    }
}

Это файл application.properties сервера счастливого слова:

# application.yml 
---
spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/..../
          searchPaths: projects/config-data
server:
  port: 8001

Это файл Dockerfile сервера счастливых слов:

FROM frolvlad/alpine-oraclejdk8 

ADD build/libs/common-config-server-0.0.1-SNAPSHOT.jar common-config-server.jar

EXPOSE 8001

ENTRYPOINT ["/usr/bin/java", "-Xmx128m", "-Xms128m"]

CMD ["-jar", "common-config-server.jar"]

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Это зависит от режима сети / хоста, который вы используете во время работы ваших контейнеров.Использование --network host включает режим сетевого хоста, который позволяет использовать localhost.Проверьте это руководство .

Другая опция может быть настроена так, как это docker-compose.yml:

version: '3.2'
services:
  client:
    build: <PATH TO DOCKERFILE>
    ports:
      - "8080"
    networks:
      - general
  server:
    build: <PATH TO DOCKERFILE>
    ports:
      - "8001"
    networks:
      - general

networks:
  general:
    driver: bridge
    ipam:
      driver: default

После этого ваши контейнеры будут в той же сети и могутподключиться через: <CONTAINER_NAME>:PORT, например, клиент подключается к server:8001

0 голосов
/ 04 июня 2018

Я предполагаю, что эта строка конфигурации вашего клиента должна указывать на ваш сервер:

spring.cloud.config.uri=http://localhost:8001

Однако, если ваш клиент и ваш сервер развернуты как док-контейнеры, localhost не будет работать.

Для работающего Docker-контейнера localhost указывает на себя, контейнер, а не на хост, на котором работает контейнер.Это не связано с Spring, а связано только с сетью докеров.

См .: https://docs.docker.com/network/

В основном вам потребуется развернуть оба контейнера в одной сети и использовать имя контейнера в качестве хоста.

...