【问题标题】:Error Running Spring Boot Application from Docker Container从 Docker 容器运行 Spring Boot 应用程序时出错
【发布时间】:2019-01-01 19:33:01
【问题描述】:

我正在尝试在 Docker 容器内运行 Spring Boot 应用程序,但遇到以下问题。但是,如果我通过 STS 运行应用程序,我不会遇到任何问题。

ationConfigEmbeddedWebApplicationContext : 遇到异常 在上下文初始化期间 - 可以 单元格刷新尝试:org.springframework.beans.factory.BeanCreationException:错误 创建名称为“requestMappingHandlerAdapter”的bean 类路径资源 [org/springframework/web/servlet/config/annotation/DelegatingWebMvcConfiguration.class]: 通过工厂方法实例化 Bean 失败; 嵌套异常是 org.springframework.beans.BeanInstantiationException: Failed to 实例化 [org.springframework.web.servlet.mvc.method.annotation.Re questMappingHandlerAdapter]:工厂方法“requestMappingHandlerAdapter”抛出异常;嵌套异常是 org.springframework.beans.factory.BeanCrea tionException:创建在类路径资源中定义的名称为“mvcValidator”的 bean 时出错 [org/springframework/web/servlet/config/annotation/DelegatingWe bMvcConfiguration.class]:通过工厂方法实例化Bean失败;嵌套异常是 org.springframework.beans.BeanInstantiationException: 失败 o 实例化[org.springframework.validation.Validator]:工厂方法'mvcValidator'抛出异常;嵌套异常是 javax.validation.ValidationEx 接收:HV000183:无法初始化“javax.el.E​​xpressionFactory”。检查您是否具有 EL 依赖项 在类路径上,或使用 ParameterMessageInt 代替插补器

Dockerfile--

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

Pom.xml--

<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>

    <configuration>
        <imageName>genaaqua/web-project</imageName>
        <baseImage>java:8</baseImage>
        <entryPoint>
            ["java", "-jar", "/${project.build.finalName}.jar"]
        </entryPoint>
        <resources>
            <resource>
                <targetPath>/</targetPath>
                <directory>${project.build.directory}</directory>
                <include>${project.build.finalName}.jar</include>
            </resource>
        </resources>
    </configuration>
</plugin>

【问题讨论】:

  • 你能分享你的 dockerFile 吗?
  • 添加了 dockerfile。
  • Docker 容器中缺少 ExpressionFactory 的依赖项
  • 你的 app.jar 是不是一个胖子。我的意思是请确保它是否包含所有依赖项。确保使用将所有 jar 组装到单个 jar 中的 maven/gradle 插件之一。
  • 我也试过在 pom 文件中添加 maven 插件,结果相同。我想我错过了什么。

标签: mysql docker spring-boot


【解决方案1】:

任何正确打包的 Spring Boot 应用程序都应该能够以:java -jar app.jar

开头

因此,首先确保您能够在 docker 容器“外部”运行应用程序,因为 docker 在这里可能并不真正相关,并且应用程序没有正确打包。

在“target”/“build”文件夹中(取决于构建工具)找到 app.jar 并在没有任何 docker 的情况下运行它。

【讨论】:

  • 我可以将应用程序作为 Spring Boot 应用程序运行,但在运行 mvn spring-boot:run 后出现同样的错误
【解决方案2】:

您设置了两个入口点。一个通过 docker 文件,另一个通过 maven 插件。我认为这可能会导致问题。

试试这个:

<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>dockerfile-maven-plugin</artifactId>
    <version>1.3.6</version>
       <configuration>
       <repository>${docker.image.prefix}/${project.artifactId}</repository>
       <buildArgs>
          <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
       </buildArgs>
       </configuration>
</plugin>

您只需要为 Docker 文件设置一个参数 -> JAR_FILE 根据您的 docker 文件。

【讨论】:

    【解决方案3】:

    已解决。只需要将依赖更改为

    <dependency>
        <groupId>org.glassfish</groupId>
        <artifactId>javax.el</artifactId>
        <version>3.0.1-b08</version>
    </dependency>
    

    来自

    <dependency>
        <groupId>javax.el</groupId>
        <artifactId>el-api</artifactId>
        <version>2.2</version>
    </dependency>
    

    【讨论】:

      猜你喜欢
      • 2018-07-11
      • 2019-01-14
      • 2018-08-16
      • 2017-02-18
      • 2017-10-08
      • 1970-01-01
      相关资源
      最近更新 更多