【问题标题】:Run Main class of base docker image运行基础 docker 镜像的 Main 类
【发布时间】:2020-03-28 03:37:38
【问题描述】:

我有一个包含主类的 Spring Boot 应用程序。我有如下 Docker 文件:

FROM docker.io/openjdk:11-jre-slim
EXPOSE 8082
EXPOSE 8443
ADD target/base-application.jar app.jar
ENV JAVA_OPTS=""
ENTRYPOINT exec java $JAVA_OPTS -Dspring.profiles.active=prod -jar /app.jar

我正在使用这个 Docker 文件创建一个 Docker 映像。我们假设这个 docker 文件是 Docker1。

我有另一个带有 Docker 文件的 Spring Boot 应用程序(没有 Main 类),如下所示:

FROM Docker1:0.0.1
EXPOSE 8443
ADD target/child-application.jar app.jar
ENV JAVA_OPTS=""
ENTRYPOINT exec java $JAVA_OPTS -Dspring.profiles.active=dev -jar /app.jar

我使用 Docker1 作为第二个应用程序的 docker 镜像的基础镜像。当我尝试运行第二个 docker 映像时,出现错误“/app.jar 中没有主清单属性”。你能帮我通过运行第二个 Docker 映像来运行 Docker1 的 Main 类吗?

【问题讨论】:

  • 嗨。你试过stackoverflow.com/questions/9689793/…相关的解决方案吗?
  • 在第二张图片中,/app.jar 是第二阶段的 jar 文件,正如你所说,它没有主类。第一阶段的 jar 文件被第二阶段的 ADD 指令覆盖。
  • @SandroAthaide,我已经完成了该链接上给出的更改。我唯一缺少的部分是答案。

标签: java spring-boot docker


【解决方案1】:

所以你想从 target/base-application.jar 文件运行主类。 Docker2 中的下一行将 base-application.jar 替换为 child-application.jar

ADD target/child-application.jar app.jar

要解决此问题,您可以将第二个 Docker 文件修改为:

FROM Docker1:0.0.1
EXPOSE 8443
ADD target/child-application.jar child-application.jar
ENV JAVA_OPTS=""
ENTRYPOINT exec java $JAVA_OPTS -Dspring.profiles.active=dev -jar /app.jar

【讨论】:

    猜你喜欢
    • 2019-04-03
    • 1970-01-01
    • 2020-02-26
    • 2020-01-20
    • 2017-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多