Приложение Spring Boot, работающее внутри Docker с mongodb и Java 11 - PullRequest
0 голосов
/ 10 марта 2019

Я запускаю простое приложение с пружинной загрузкой внутри док-контейнера. Вот мои характеристики: - пружинная загрузка 2.1.3. ВЫПУСК - Java 11 с Windows 10 - Использование докера: FROM debian: эластичный, как упаковщик - ENV JDK_VERSION = "11.0.1"

Простые приложения с весенней загрузкой отлично работают с вышеуказанной конфигурацией

Когда я добавил Mongodb (Spring data mongo) и запустил приложения Spring Boor, он хорошо работает на моем компьютере с Windows, но когда я запускаю в Docker-контейнере, он выдает ошибку следующим образом:

==============================================

o.s.b.web.embedded.tomcat.TomcatStarter: Ошибка запуска контекста Tomcat. Исключение: org.springframework.beans.factory.BeanCreationException. Сообщение: Ошибка создания бина с именем 'servletEndpointRegistrar', определенного в ресурсе пути к классу [org / springframework / boot / activate / autoconfigure / endpoint / web / ServletEndpointManagementContextConfiguration $ WebMvcServletEndpointManagementContextConfiguration.class] через метод фабрики не удалось; вложенным исключением является org.springframework.beans.BeanInstantiationException: не удалось создать экземпляр [org.springframework.boot.actuate.endpoint.web.ServletEndpointRegistrar]: метод фабрики 'servletEndpointRegistrar' вызвал исключение; вложенное исключение: org.springframework.beans.factory.UnsatisfiedDependencyException: ошибка создания бина с именем 'healthEndpoint', определенного в ресурсе пути к классу [org / springframework / boot / activate / autoconfigure / health / HealthEndpointConfiguration.class]: неудовлетворенная зависимость, выраженная методом ' healthEndpoint 'параметр 1; вложенным исключением является org.springframework.beans.factory.BeanCreationException: ошибка при создании компонента с именем 'healthIndicatorRegistry', определенным в ресурсе пути к классу [org / springframework / boot / activate / autoconfigure / health / HealthIndicatorAutoConfiguration.class]: метод экземпляра компонента не был обработан с помощью фабрики ; вложенным исключением является org.springframework.beans.BeanInstantiationException: не удалось создать экземпляр [org.springframework.boot.actuate.health.HealthIndicatorRegistry]: фабричный метод 'healthIndicatorRegistry' вызвал исключение; вложенное исключение: org.springframework.beans.factory.UnsatisfiedDependencyException: ошибка при создании bean-компонента с именем org.springframework.boot.actuate.autoconfigure.mongo.MongoHealthIndicatorAutoConfiguration ': выражена несоответствующая параметру зависимость 0; Вложенное исключение - org.springframework.beans.factory.UnsatisfiedDependencyException: ошибка создания бина с именем 'mongoTemplate', определенного в ресурсе пути к классу [org / springframework / boot / autoconfigure / data / mongo / MongoDataAutoConfiguration.class]: выраженный метод через недоставку mongoTemplate 'параметр 0; вложенным исключением является org.springframework.beans.factory.BeanCreationException: ошибка создания бина с именем 'mongoDbFactory', определенного в ресурсе пути к классу [org / springframework / boot / autoconfigure / data / mongo / MongoDataAutoConfiguration.class]: метод экземпляра бина с помощью фабрики не сработал ; вложенным исключением является org.springframework.beans.BeanInstantiationException: не удалось создать экземпляр [org.springframework.data.mongodb.core.MongoDbFactorySupport]: фабричный метод 'mongoDbFactory' вызвал исключение; вложенное исключение - org.springframework.beans.factory.BeanCreationException: ошибка создания бина с именем 'mongo', определенного в ресурсе пути к классу [org / springframework / boot / autoconfigure / mongo / MongoAutoConfiguration.class]: сбой создания экземпляра бина с помощью метода фабрики; вложенным исключением является org.springframework.beans.BeanInstantiationException: не удалось создать экземпляр [com.mongodb.MongoClient]: фабричный метод 'mongo' вызвал исключение; вложенное исключение - com.mongodb.MongoClientException: невозможно создать контекст JNDI для разрешения записей SRV. Класс com.sun.jndi.dns.DnsContextFactory недоступен в этой JRE2019-03-10 06: 18: 58.201 ОШИБКА 1 --- [main] o.s.boot.SpringApplication: сбой запуска приложения

org.springframework.context.ApplicationContextException: невозможно запустить веб-сервер; вложенное исключение org.springframework.boot.web.server.WebServerException: невозможно запустить встроенный Tomcat at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh (ServletWebServerApplicationContext.java:157) ~ [spring-boot-2.1.3.RELEASE.jar! /: 2.1.3.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh (AbstractApplicationContext.java:543) ~ [spring-context-5.1.5.RELEASE.jar! /: 5.1.5.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh (ServletWebServerApplicationContext.java:142) ~ [spring-boot-2.1.3.RELEASE.jar! /: 2.1.3.RELEASE] в org.springframework.boot.SpringApplication.refresh (SpringApplication.java:775) ~ [spring-boot-2.1.3.RELEASE.jar! /: 2.1.3.RELEASE] в org.springframework.boot.SpringApplication.refreshContext (SpringApplication.java:397) ~ [spring-boot-2.1.3.RELEASE.jar! /: 2.1.3.RELEASE] в org.springframework.boot.SpringApplication.run (SpringApplication.java:316) ~ [spring-boot-2.1.3.RELEASE.jar! /: 2.1.3.RELEASE] в org.springframework.boot.SpringApplication.run (SpringApplication.java:1260) ~ [spring-boot-2.1.3.RELEASE.jar! /: 2.1.3.RELEASE] в org.springframework.boot.SpringApplication.run (SpringApplication.java:1248) ~ [spring-boot-2.1.3.RELEASE.jar! /: 2.1.3.RELEASE] в com.eschoolo.EschooloCoreServiceApplication.main (EschooloCoreServiceApplication.java:24) ~ [классы! /: 0.0.1-SNAPSHOT] в java.base / jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) ~ [na: na] в java.base / jdk.internal.reflect.NativeMethodAccessorImpl.invoke (неизвестный источник) ~ [na: na] в java.base / jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (неизвестный источник) ~ [na: na] в java.base / java.lang.reflect.Method.invoke (неизвестный источник) ~ [na: na] в org.springframework.boot.loader.MainMethodRunner.run (MainMethodRunner.java:48) ~ [eschoolo.jar: 0.0.1-SNAPSHOT] в org.springframework.boot.loader.Launcher.launch (Launcher.java:87) ~ [eschoolo.jar: 0.0.1-SNAPSHOT] в org.springframework.boot.loader.Launcher.launch (Launcher.java:50) ~ [eschoolo.jar: 0.0.1-SNAPSHOT] в org.springframework.boot.loader.JarLauncher.main (JarLauncher.java:51) ~ [eschoolo.jar: 0.0.1-SNAPSHOT] Вызвано: org.springframework.boot.web.server.WebServerException: Невозможно запустить встроенный Tomcat в org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize (TomcatWebServer.java:125) ~ [spring-boot-2.1.3.RELEASE.jar! /: 2.1.3.RELEASE] в org.springframework.boot.web.embedded.tomcat.TomcatWebServer. (TomcatWebServer.java:86) ~ [spring-boot-2.1.3.RELEASE.jar! /: 2.1.3.RELEASE] at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getTomcatWebServer (TomcatServletWebServerFactory.java:415) ~ [spring-boot-2.1.3.RELEASE.jar! /: 2.1.3.RELE at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer (TomcatServletWebServerFactory.java:174) ~ [spring-boot-2.1.3.RELEASE.jar! /: 2.1.3.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer (ServletWebServerApplicationContext.java:181) ~ [spring-boot-2.1.3.RELEASE.jar! /: 2.1.3.RELE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh (ServletWebServerApplicationContext.java:154) ~ [spring-boot-2.1.3.RELEASE.jar! /: 2.1.3.RELEASE] ... 16 общих кадров опущеноВызвано: org.springframework.beans.factory.BeanCreationException: ошибка создания бина с именем 'servletEndpointRegistrar', определенного в ресурсе пути к классу [org / springframework / boot / activate / autoconfigure / endpoint / web / ServletEndpointManagementContextConfiguration $ point_set_set_name_set_set_set_set_settionMision_point_set_set_set_set_set_set_set_set_set_set_set_t_setчерез фабричный метод не удалось;вложенным исключением является org.springframework.beans.BeanInstantiationException: не удалось создать экземпляр [org.springframework.boot.actuate.endpoint.web.ServletEndpointRegistrar]: метод фабрики 'servletEndpointRegistrar' вызвал исключение;вложенное исключение: org.springframework.beans.factory.UnsatisfiedDependencyException: ошибка создания бина с именем 'healthEndpoint', определенного в ресурсе пути к классу [org / springframework / boot / activate / autoconfigure / health / HealthEndpointConfiguration.class]: неудовлетворенная зависимость, выраженная методом 'healthEndpoint 'параметр 1;вложенным исключением является org.springframework.beans.factory.BeanCreationException: ошибка при создании компонента с именем 'healthIndicatorRegistry', определенным в ресурсе пути к классу [org / springframework / boot / activate / autoconfigure / health / HealthIndicatorAutoConfiguration.class]: метод экземпляра компонента не был обработан с помощью фабрики;вложенным исключением является org.springframework.beans.BeanInstantiationException: не удалось создать экземпляр [org.springframework.boot.actuate.health.HealthIndicatorRegistry]: фабричный метод 'healthIndicatorRegistry' вызвал исключение;вложенное исключение: org.springframework.beans.factory.UnsatisfiedDependencyException: ошибка при создании bean-компонента с именем org.springframework.boot.actuate.autoconfigure.mongo.MongoHealthIndicatorAutoConfiguration ': выражена несоответствующая параметру зависимость 0;Вложенное исключение - org.springframework.beans.factory.UnsatisfiedDependencyException: ошибка создания бина с именем 'mongoTemplate', определенного в ресурсе пути к классу [org / springframework / boot / autoconfigure / data / mongo / MongoDataAutoConfiguration.class]: выраженный метод через недоставкуmongoTemplate 'параметр 0;вложенным исключением является org.springframework.beans.factory.BeanCreationException: ошибка создания бина с именем 'mongoDbFactory', определенного в ресурсе пути к классу [org / springframework / boot / autoconfigure / data / mongo / MongoDataAutoConfiguration.class]: метод экземпляра бина с помощью фабрики не сработал;вложенным исключением является org.springframework.beans.BeanInstantiationException: не удалось создать экземпляр [org.springframework.data.mongodb.core.MongoDbFactorySupport]: фабричный метод 'mongoDbFactory' вызвал исключение;вложенное исключение - org.springframework.beans.factory.BeanCreationException: ошибка создания бина с именем 'mongo', определенного в ресурсе пути к классу [org / springframework / boot / autoconfigure / mongo / MongoAutoConfiguration.class]: сбой создания экземпляра бина с помощью метода фабрики;вложенным исключением является org.springframework.beans.BeanInstantiationException: не удалось создать экземпляр [com.mongodb.MongoClient]: фабричный метод 'mongo' вызвал исключение;вложенное исключение com.mongodb.MongoClientException: невозможно создать контекст JNDI для разрешения записей SRV.Класс com.sun.jndi.dns.DnsContextFactory недоступен в этой JRE по адресу org.springframework.beans.factory.support.ConstructorResolver.instantiate (ConstructorResolver.java:627) ~ [spring-beans-5.1.5.RELEASE.jar! /: 5.1.5.RELEASE] в org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod (ConstructorResolver.java:607) ~ [spring-beans-5.1.5.RELEASE.jar! /: 5.1.5.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod (AbstractAutowireCapableBeanFactory.java:1305) ~ [spring-beans-5.1.5jRELE: 5.1..springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance (AbstractAutowireCapableBeanFactory.java:1144) ~ [spring-beans-5.1.5.RELEASE.jar! /: 5.1.5.RELEASE]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:555) ~ [spring-beans-5.1.5.RELEASE.jar! /: 5.1.5.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:515) ~ [spring-beans-5.1.5.RELEASE.jar! /: 5.1.5.RELEASE] в org.springframework.beans.factory.support.AbstractBeanFactory.lambda $ doGetBean $ 0 (AbstractBeanFactory.java:320) ~ [spring-beans-5.1.5.RELEASE.jar! /: 5.1.5.RELEASE] в org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:222) ~ [spring-beans-5.1.5.RELEASE.jar! /: 5.1.5.RELEASE] в org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:318) ~ [spring-beans-5.1.5.RELEASE.jar! /: 5.1.5.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:204) ~ [spring-beans-5.1.5.RELEASE.jar! /: 5.1.5.RELEASE] at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType (ServletContextInitializerBeans.java:235) ~ [spring-boot-2.1.3.RELEASE.jar! /: 2.1.3.RELEASE] at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType (ServletContextInitializerBeans.java:226) ~ [spring-boot-2.1.3.RELEASE.jar! /: 2.1.3.RELEASE] at org.springframework.boot.web.servlet.ServletContextInitializerBeans.addServletContextInitializerBeans (ServletContextInitializerBeans.java:101) ~ [spring-boot-2.1.3.RELEASE.jar! /: 2.1.3.EL в org.springframework.boot.web.servlet.ServletContextInitializerBeans. (ServletContextInitializerBeans.java:88) ~ [spring-boot-2.1.3.RELEASE.jar! /: 2.1.3.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.getServletContextInitializerBeans (ServletWebServerApplicationContext.java:261) ~ [spring-boot-2.1.3.RELEASE.jar!: в org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.selfInitialize (ServletWebServerApplicationContext.java:234) ~ [spring-boot-2.1.3.RELEASE.jar! /: 2.1.3.RELEASE] в org.springframework.boot.web.embedded.tomcat.TomcatStarter.onStartup (TomcatStarter.java:54) ~ [spring-boot-2.1.3.RELEASE.jar! /: 2.1.3.RELEASE] в

Причина: org.springframework.beans.factory.BeanCreationException: Ошибка создания компонента с именем 'mongoDbFactory', определенного в ресурсе пути к классу [org / springframework / boot / autoconfigure / data / mongo / MongoDataAutoConfiguration.class] через экземпляр компонента заводской метод не удался; вложенным исключением является org.springframework.beans.BeanInstantiationException: не удалось создать экземпляр [org.springframework.data.mongodb.core.MongoDbFactorySupport]: фабричный метод 'mongoDbFactory' вызвал исключение; вложенное исключение - org.springframework.beans.factory.BeanCreationException: ошибка создания бина с именем 'mongo', определенного в ресурсе пути к классу [org / springframework / boot / autoconfigure / mongo / MongoAutoConfiguration.class]: сбой создания экземпляра бина с помощью метода фабрики; вложенным исключением является org.springframework.beans.BeanInstantiationException: не удалось создать экземпляр [com.mongodb.MongoClient]: фабричный метод 'mongo' вызвал исключение; вложенное исключение - com.mongodb.MongoClientException: невозможно создать контекст JNDI для разрешения записей SRV. Класс com.sun.jndi.dns.DnsContextFactory недоступен в этой JRE в org.springframework.beans.factory.support.ConstructorResolver.instantiate (ConstructorResolver.java:627) ~ [spring-beans-5.1.5.RELEASE.jar! /: 5.1.5.RELEASE] at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod (ConstructorResolver.java:607) ~ [spring-beans-5.1.5.RELEASE.jar! /: 5.1.5.RELEASE]в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod (AbstractAutowireCapableBeanFactory.java:1305) ~

1014 * ===============================================================

Подозреваю, что Spring Boot не поддерживает Java 11полностью или у меня отсутствует какой-либо Java-модуль, который мне нужно добавить в мой Dockerfile.

На данный момент у меня есть следующие java-модули, добавленные в мой dockerfile:

- add-modules \ java.base, java.sql, java.naming, java.desktop, java.management, java.security.jgss, java.instrument

Любые предложения будут полезны.

1 Ответ

0 голосов
/ 12 марта 2019

Я изменил образ Docker и теперь он работает нормально:

Вот Dockerfile, полезный, если вы хотите настроить Docker для Java 11 с maven.

FROM openjdk:11-jdk-slim

ARG MAVEN_VERSION=3.6.0
ARG USER_HOME_DIR="/root"
ARG SHA=fae9c12b570c3ba18116a4e26ea524b29f7279c17cbaadc3326ca72927368924d9131d11b9e851b8dc9162228b6fdea955446be41207a5cfc61283dd8a561d2f
ARG BASE_URL=https://apache.osuosl.org/maven/maven-3/${MAVEN_VERSION}/binaries

RUN apt-get update && \
    apt-get install -y \
      curl procps \
  && rm -rf /var/lib/apt/lists/*

# Maven fails with 'Can't read cryptographic policy directory: unlimited'
# because it looks for $JAVA_HOME/conf/security/policy/unlimited but it is in
# /etc/java-9-openjdk/security/policy/unlimited
RUN ln -s /etc/java-11-openjdk /usr/lib/jvm/java-11-openjdk-$(dpkg --print-architecture)/conf

RUN mkdir -p /usr/share/maven /usr/share/maven/ref \
  && curl -fsSL -o /tmp/apache-maven.tar.gz ${BASE_URL}/apache-maven-${MAVEN_VERSION}-bin.tar.gz \
  && echo "${SHA}  /tmp/apache-maven.tar.gz" | sha512sum -c - \
  && tar -xzf /tmp/apache-maven.tar.gz -C /usr/share/maven --strip-components=1 \
  && rm -f /tmp/apache-maven.tar.gz \
  && ln -s /usr/share/maven/bin/mvn /usr/bin/mvn

ENV MAVEN_HOME /usr/share/maven
ENV MAVEN_CONFIG "$USER_HOME_DIR/.m2"

COPY mvn-entrypoint.sh /usr/local/bin/mvn-entrypoint.sh
COPY settings-docker.xml /usr/share/maven/ref/

ENTRYPOINT ["/usr/local/bin/mvn-entrypoint.sh"]
CMD ["mvn"]

CMD ["mvn", "clean","package","-Dmaven.test.skip=true"]

# COPY --from=packager "$JAVA_HOME" "$JAVA_HOME"
COPY "target/*.jar" "/myspringbootapp.jar"

EXPOSE 8080
CMD [ "-jar", "/myspringbootapp.jar" ]
ENTRYPOINT [ "java" ]
...