因此,我制作了一个spring boot应用程序,应该放在docker容器中并从中运行,我想使用docker文件构建整个映像

FROM openjdk:8-jdk-alpine
ADD . /analytics-service
WORKDIR /analytics-service
ENTRYPOINT ./mvnw spring-boot:run 

当我创建映像时,它只是复制文件,只有在我运行它之后,它才会开始下载所有maven依赖项.

推荐答案

如果我理解正确,你想先下载Maven依赖项,然后将它们与你的应用程序合并成一张图片吗?

如果这是你想要的,那么正确的方法如下:

  1. 拉一个maven形象(通常你称这个阶段为"建设者"——它只是一个名字)
  2. 复制你的pom.将xml文件保存到工作目录中
  3. 运行maven一次以获取依赖项,然后再次打包
  4. 从openjdk创建一个新的映像库
  5. 将第3步的结果复制到应用程序图像中
  6. expose 端口
  7. 提供一个入口点

下面是Dockerfile中的内容:

FROM maven AS builder
WORKDIR /usr/src/analytics
COPY pom.xml .
RUN mvn -B dependency:go-offline

COPY . .
RUN mvn package

FROM openjdk:8-jdk-alpine
WORKDIR /analytics-service
COPY --from=builder /usr/src/analytics/target/YOUR_JAR_FILENAME.jar .
EXPOSE 80
ENTRYPOINT ["java", "-jar", "/analytics-service/YOUR_JAR_FILENAME.jar"]

在运行这个程序之前,您需要知道jar文件的名称.您可以在计算机上的Docker外部运行mvn包,并查看生成的文件名.把它复制到Dockerfile上面的两个地方.

Java相关问答推荐

JPackage-results已安装-如何添加系统属性?

H2弹簧靴试验跌落台

如何在Java中声明未使用的变量?

Jakarta CDI强制bean构造/注册遗留事件侦听器

将响应转换为带值的键

通过Spring Security公开Spring Boot执行器端点

无法在Java中处理PayPal支付响应

扩展视图高度,并将其拖动到较低的视图上,而不是将其向下推?

Lombok@Nonnull是否也对供应商有影响?

垃圾收集时间长,会丢弃网络连接,但不会在Kubernetes中反弹Pod

当b是一个字节并且在Java中值为-1时,为什么b>;>;>;1总是等于-1?

将双倍转换为百分比

具有最大共同前景像素的图像平移优化算法

Java嵌套流查找任意值

在实例化中指定泛型类型与不指定泛型类型之间的区别

Win32函数的JNA绑定DwmGetColorizationColor返回E_INVALIDARG错误

如何在Java中的重写方法参数中强制(Enum)接口实现?

关于正则表达式的一个特定问题,该问题与固定宽度负向后看有关

更新不可变的深层嵌套字段

为什么方法接受协变类型的匿名泛型类对象?