Почему приложение Java запускается в контейнере Docker, доступном не на открытом порту?

У меня 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 по локальному хосту: 8761, этот хост недоступен. Хм, хорошо. В списке моих контейнеров я вижу следующее:

0.0.0.0:32772->8761/tcp

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
543
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

ports:
  - "8761-8761"

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

ports:
  - "8761:8761"

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

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

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

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

Попробуйте взглянуть на следующие свойства приложения (или переменные среды):

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

Нет, стандартный порт Юрики 8611.

Eugene Shmorgun 30.04.2019 11:19

Другие вопросы по теме