У меня есть две банки: "Eureka" и "Webportal".
Я пытался запустить их внутри двух контейнеров Docker (используя docker-compose).
Я получаю сообщение об ошибке из контейнера службы Webportal: com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server
Контейнеры могут связаться друг с другом, я проверил это с помощью:
- docker exec -it {container_id} /bin/sh
(прикрепить консоль)
- wget http://192.168.1.169:8761
(получить домашнюю страницу службы eureka).
Я читал, что Eureka не может определить имя хоста, и возможный обходной путь, предложенный сообществом, состоит в том, чтобы использовать ip хост-машины.
Это мой файл docker-compose:
version: '3'
services:
mysql:
container_name: project-mysql
image: mysql/mysql-server:5.7
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: project
MYSQL_ROOT_PASSWORD:
MYSQL_ROOT_HOST: '%'
restart: always
redis:
container_name: project-redis
image: redis:alpine
ports:
- "6379:6379"
restart: always
eureka-server:
container_name: project-eureka
image: maven:3.5-jdk-8
ports:
- "8761:8761"
working_dir: /service
volumes:
- ../project-eureka-service/target:/service
command: java -jar /service/project-eureka-service-0.0.1-SNAPSHOT.jar
restart: always
depends_on:
- redis
- mysql
webportal:
container_name: project-webportal
image: maven:3.5-jdk-8
ports:
- "9191:9191"
working_dir: /service
volumes:
- ../project-webportal/target:/service
command: java -jar /service/project-webportal-0.0.1-SNAPSHOT.jar
restart: always
depends_on:
- eureka-server
links:
- eureka-server
networks:
spring-cloud-network:
driver: bridge
И это моя конфигурация службы Webportal:
spring.application.name=webportal-service
server.port=9191
eureka.client.service-url.default-zone=http://192.168.1.169:8761/eureka
proxy-url=http://192.168.1.169:8762
endpoint.login=/user/login
endpoint.registration=/user/userRegistration
endpoint.log-chart.daily=/presentation/getUserLogDaily
endpoint.log-chart.weekly=/presentation/getUserLogWeekly
endpoint.log-chart.monthly=/presentation/getUserLogMonthly
endpoint.user-log=/presentation/getUserLog
endpoint.user-permission-list=/user/userPermissionList
eureka.instance.prefer-ip-address=true
eureka.instance.ip-address=192.168.1.169
С этой конфигурацией я могу запускать их с хост-машины (через java -jar), но не через docker (docker-compose up)).
Что я должен изменить?
РЕДАКТИРОВАТЬ
Исправлен файл свойств Webportal:
spring.application.name=webportal-service
server.port=9191
eureka.client.service-url.defaultZone=http://192.168.1.169:8761/eureka
proxy-url=http://192.168.1.169:8762
endpoint.login=/user/login
endpoint.registration=/user/userRegistration
endpoint.log-chart.daily=/presentation/getUserLogDaily
endpoint.log-chart.weekly=/presentation/getUserLogWeekly
endpoint.log-chart.monthly=/presentation/getUserLogMonthly
endpoint.user-log=/presentation/getUserLog
endpoint.user-permission-list=/user/userPermissionList