как докернизировать весеннее приложение для микросервисов, которое использует конфигурацию Eureka и Cloud - PullRequest
0 голосов
/ 29 января 2020

Я работаю в этом приложении для микросервисов этой весны, и все работает нормально, пока я не хочу докернизировать микросервисы. Имея немного знаний о docker, я изо всех сил стараюсь заставить его работать. Вот что я делал до сих пор:

1.Config server этот сервер является централизованным сервером, который содержит общие конфигурации других сервисов, а также специальные конфигурации для каждого микросервиса.

Это конфигурация сервиса конфигурации

spring.profiles.active=native
server.port=8888
spring.cloud.config.server.native.search-locations=classpath:/common-config
spring.application.name=config-server
#the password which apps will use to access its configurations
spring.security.user.password=1234

, затем я добавил в src / main / resources файл-каталог, называемый common-config, который содержит все конфиги службы:

  1. Discover-service.yml

это конфигурация для сервера eureka

server:
  port: 8762

Затем в root из сервер конфигурации, я добавляю 2 файла Dockerfile и docker -compose.yml:

Dockerfile

# Start with a base image containing Java runtime
FROM openjdk:8-jdk-alpine

# Add Maintainer Info
LABEL maintainer="sanchi.goyal.sg@gmail.com"

# Add a volume pointing to /tmp
VOLUME /tmp

# Make port 8888 available to the world outside this container
EXPOSE 8888

# The application's jar file
ARG JAR_FILE=./target/*.jar

# Add the application's jar to the container
ADD ${JAR_FILE} app.jar

# Run the jar file
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

docker -compose

version: "3"

services:
  config-server:
    image: config-server:0.0.1-SNAPSHOT
    environment:
      - JAVA_OPTS=
         -DEUREKA_SERVER=http://discover-service:8762/eureka
    ports:
      - 8888:8888  
  discover-service:
    image: discover-service:0.0.1-SNAPSHOT
    ports:
      - 8762:8762
    depends_on:
      - config-server
restart: on-failure

Теперь в приложении Discover-Service я добавил Dockerfile в каталог root следующим образом:

    # Start with a base image containing Java runtime
FROM openjdk:8-jdk-alpine

# Add Maintainer Info
LABEL maintainer="sanchi.goyal.sg@gmail.com"

# Add a volume pointing to /tmp
VOLUME /tmp

# Make port 8888 available to the world outside this container
EXPOSE 8762

# The application's jar file
ARG JAR_FILE=./target/*.jar

# Add the application's jar to the container
ADD ${JAR_FILE} app.jar

# Run the jar file
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

и в src / main / resources я добавил файл bootstrap .yml следующим образом:

#This file is the entrypoint for spring to know where to look for the configuration file and hold the initial configuration

spring:
  application:
    name: discover-service #name of the application
  cloud:
    config:
      uri: http://localhost:8888 #where the config-service is running
      fail-fast: true #the service will not run if it can't reach the config-service
      password: 1234 #password of the config-service
      username: user #username of the config-service

eureka:
  instance:
    prefer-ip-address: true #when the application registers with eureka, it uses its IP address rather than its hostname
  client:
    registerWithEureka: false #tells the built-in eureka client to not register itself with eureka, because we should act as a server
    fetchRegistry: false

Теперь вот проблема, до Начав докеризацию двух приложений, я создаю файл jar и файл docker jar для каждого приложения, поэтому для приложения config-server я создаю 2 JAR без проблем, но для второго приложения, чтобы создать 2 JAR-файлы, я должен сохранить свойство ниже в bootstrap .yml, чтобы он знал, где находится сервер конфигурации.

uri: http://localhost:8888

Теперь, когда я запускаю команду, docker:

docker-compose up

первое приложение работает, но второе приложение говорит:

Fetching config from server at : http://localhost:8888
Connect Timeout Exception on Url - http://localhost:8888
org.springframework.web.client.ResourceAccessException: I/O error on GET request for "http://localhost:8888/discover-service/default": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused)

может кто-нибудь, пожалуйста, помогите мне с этим!

вот мой репозиторий github https://github.com/MoroccanGeek/UnitedRemote-BackendChanllenge Я не зафиксировал изменения, описанные в этом вопросе. Вы найдете несколько служб, но если я смогу запустить 2 описанных приложения в docker, я смогу сделать это с другими

EDIT Мне удалось запустить свои приложения, изменив docker -compose.yml к этому:

version: "3"

services:
  config-server:
    image: config-server:0.0.1-SNAPSHOT
    environment:
      - JAVA_OPTS=
         -DEUREKA_SERVER=http://discover-service:8762/eureka
    ports:
      - 8888:8888
  discover-service:
    image: discover-service:0.0.1-SNAPSHOT
    ports:
      - 8762:8762
    depends_on:
      - config-server
    restart: on-failure
networks:
  host:

но что-то странное происходит, когда я хочу, например, go приложение для обнаружения службы (которое является сервером eureka), оно не работает, но когда я go на другой веб-сайт на той же вкладке и go назад, он показывает, что ожидается

...