Почему приложение java, запущенное в Docker-контейнере, доступно не на незащищенном порту? - PullRequest
0 голосов
/ 30 апреля 2019

Eureka из Spring Cloud запущена внутри док-контейнера.Это мой Dockerfile для построения и демонстрации Eureka:

FROM maven:3.5-jdk-8 AS build
COPY src /home/eureka/src
COPY pom.xml /home/eureka
RUN mvn -f /home/eureka/pom.xml clean package

FROM openjdk:8-jdk-alpine
COPY --from=build /home/eureka/target/service-registry-1.0-SNAPSHOT.jar /usr/app/service-registry-1.0-SNAPSHOT.jar

ENTRYPOINT ["java","-jar","/usr/app/service-registry-1.0-SNAPSHOT.jar"]  

EXPOSE 8761

Это мой файл для создания докера:

version: '2.1'

services: 

  eureka-service-registry-app: 
    build: eureka-service-registry-app
    ports:
      - "8761-8761"

В инфраструктуре будет больше приложений, но сейчас они комментируются.

Я запускаю docker-compose up, процесс выглядит нормально, но когда я хочу проверить веб-панель Eureka по localhost: 8761, этот хост недоступен.Хм, хорошоВ списке моих контейнеров я вижу следующее:

0.0.0.0:32772->8761/tcp

и localhost: 32772 доступен, а Эврика жива.Более того, если я снова начну docker-compose up, этот порт будет увеличен, и новый порт, где Eureka будет доступна, будет 32773. Таким образом, я вижу там некоторую схему, но я не понимаю, как сделать этот порт стабильным и регулярным, как Eureka быланачалось без докера на 8761

Ответы [ 2 ]

3 голосов
/ 30 апреля 2019

Вы определяете диапазон портов с помощью

ports:
  - "8761-8761"

Пожалуйста, измените его на

ports:
  - "8761:8761"
0 голосов
/ 30 апреля 2019

Как уже отмечали другие: порт, отображаемый в docker-compose.yml, должен быть изменен на -"8761:8761".

Однако я вижу больше моментов на этом.

Порт Eureka по умолчанию (насколько я знаю) - 1111. Вы выставляете правильный порт?

Кроме того, будьте осторожны при использовании eureka в сочетании с докером. Они могут зарегистрироваться с помощью localhost или своим внутренним IP-адресом с Контейнер Docker, который может быть недоступен из других контейнеров Docker.

Рассмотрим следующие пропорции приложения (или переменные среды):

eureka.instance.prefer-ip-address=false
eureka.instance.ip-address=$HOST_IP_ADDRESS
eureka.instance.hostname=localhost
...