【问题标题】:Springboot app getting stuck at startup in Docker with Java 10Spring Boot 应用程序在使用 Java 10 的 Docker 启动时卡住了
【发布时间】:2018-10-03 06:58:58
【问题描述】:

解决方案

椅子和键盘之间存在错误

问题在于 SPRING_PROFILES_ACTIVE 环境变量指向一个不存在的配置文件。将其更改为正确的名称可解决此问题。我本来希望 Spring 会输出一个错误,但是哦,好吧。

原问题:

我有一个在 Java10 中使用 Spring Boot 运行的“hello world”Java 应用程序构建。它直接在我的机器上运行良好,但是当尝试使用 docker 启动它时,它会遇到以下输出:

(The Srping ascii art)

 :: Spring Boot ::        (v2.0.1.RELEASE)

WARNING: An illegal reflective access operation has occurred WARNING: Illegal reflective access by org.codehaus.groovy.reflection.CachedClass (jar:file:/app.jar!/BOOT-INF/lib/groovy-2.4.15.jar!/) to method java.lang.Object.finalize()
WARNING: Please consider reporting this to the maintainers of org.codehaus.groovy.reflection.CachedClass WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release

正在运行的进程:

java -Xmx800m -Djava.security.egd=file:/dev/./urandom -jar /app.jar

它直接在我的笔记本电脑 (Mac OS) 和我同事的笔记本电脑 (Windows 7) 上运行良好,但在本地和 Kubernetes (AWS) 上的 docker 中都失败了

我已经尝试将 spring 日志级别配置为 DEBUG,但没有任何效果。 我还尝试编辑 $JAVA_HOME/conf/security/java.security 以直接更改 java securerandom.source 属性,这也不起作用。

编辑: dockerfile 是一个 FROM 使用这个:

FROM openjdk:10-jdk

RUN apt-get update && \
    apt-get install -y openssl curl
ADD java.security /docker-java-home/conf/security/java.security

ONBUILD ARG BUILD_VERSION_NO="no-version"

ENV SPRING_PROFILES_ACTIVE=prod
#ENV JAVA_OPTS="-Xdebug -Xrunjdwp:server=y,transport=dt_socket,suspend=n"

ONBUILD COPY target/*.jar app.jar
ONBUILD RUN sh -c 'touch /app.jar'
ONBUILD RUN echo "$BUILD_VERSION_NO" > /version

EXPOSE 8080

ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -jar /app.jar" ]

我笔记本的java版本是

java version "10.0.1" 2018-04-17
Java(TM) SE Runtime Environment 18.3 (build 10.0.1+10)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.1+10, mixed mode)

用等效的openjdk打包应用并不能解决问题

openjdk version "10.0.1" 2018-04-17
OpenJDK Runtime Environment (build 10.0.1+10)
OpenJDK 64-Bit Server VM (build 10.0.1+10, mixed mode) 

【问题讨论】:

  • 您可以向我们展示您的 Dockerfile 吗?您的笔记本电脑使用的是哪个版本的 Java10?
  • @NayoR 我编辑了问题,添加了您要求的信息
  • 谢谢。 “卡住了”是什么意思? (警告不应阻止应用程序)
  • 我希望 spring 日志的其余部分,并且在某个时候应用程序将开始响应运行状况检查和其他端点。它永远不会发生。 (PSA:一位同事告诉我,他在一个阻塞线程的库中发现了一些问题。我会在获得更多信息后立即更新)
  • @NayoR 我用分辨率更新了问题。这与 docker 或 java10 无关。感谢您的帮助!

标签: java spring docker spring-boot


【解决方案1】:

回答我自己的问题以防其他人碰到这个问题:

SPRING_PROFILES_ACTIVE 环境变量包含“prod”,而应用程序中的弹簧配置文件为“pro”。更改 Dockerfile 中的值解决了这个问题。

【讨论】:

    猜你喜欢
    • 2017-09-23
    • 1970-01-01
    • 1970-01-01
    • 2015-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-16
    • 1970-01-01
    相关资源
    最近更新 更多