无法使用Multi-Stage Docker Build运行Spring Boot应用程序



我一直在遵循spring网站上的指南[here][1],但当我尝试运行Docker时,我得到了一个未找到的类异常。我看不出我在这里做错了什么。

下面是我的档案:

# syntax=docker/dockerfile:experimental
FROM openjdk:15-jdk-alpine AS build
WORKDIR /workspace/app
COPY . /workspace/app
RUN --mount=type=cache,target=/root/.gradle ./gradlew clean build
RUN mkdir -p build/dependency && (cd build/dependency; jar -xf ../libs/*.jar)
FROM openjdk:15-jdk-alpine
VOLUME /tmp
ARG DEPENDENCY=/workspace/app/build/dependency
COPY --from=build ${DEPENDENCY}/BOOT-INF/lib /app/lib
COPY --from=build ${DEPENDENCY}/META-INF /app/META-INF
COPY --from=build ${DEPENDENCY}/BOOT-INF/classes /app
ENTRYPOINT ["java","-cp","app:app/lib/*","TFSSearchServiceApplication"]

如果我查看docker图像,这里是我看到的文件夹结构:

/app # ls
META-INF                           application-local.yml              application-production.yml         application.yml                    network
application-local.properties       application-production.properties  application.properties             lib
/app/network/mytest/search # ls
TFSSearchServiceApplication.class  controller                         exception                          service
config                             converter                          model                              validators
/app/network/mytest/search # 

这正是我所期望的,然而,任何人都能发现我为什么会得到类未找到的错误,我可以从上一个代码块中看到它。

非常感谢[1] :https://spring.io/guides/topicals/spring-boot-docker/

将Dockerfile更改为以下内容(仅在最后一行中更改(:

syntax=docker/dockerfile:experimental
FROM openjdk:15-jdk-alpine AS build
WORKDIR /workspace/app
COPY . /workspace/app
RUN --mount=type=cache,target=/root/.gradle ./gradlew clean build
RUN mkdir -p build/dependency && (cd build/dependency; jar -xf ../libs/*.jar)
FROM openjdk:15-jdk-alpine
VOLUME /tmp
ARG DEPENDENCY=/workspace/app/build/dependency
COPY --from=build ${DEPENDENCY}/BOOT-INF/lib /app/lib
COPY --from=build ${DEPENDENCY}/META-INF /app/META-INF
COPY --from=build ${DEPENDENCY}/BOOT-INF/classes /app
ENTRYPOINT ["java","-cp","app:app/lib/*","network.mytest.search.TFSSearchServiceApplication"]

ClassNotFoundException的原因是您的类路径(-cp(正在/app和/app/lib/*中搜索。您的SpringBootApplication驻留在一个包(network.mytest.search.TFSSearchServiceApplication(中。因此,您必须通过另外指定包来将java命令指向它。

请确保TFSSearchServiceApplication具有@SpringBootApplication注释。

最新更新