如何使用新的spring-boot JAR重新启动容器而没有jar的绝对路径?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用新的spring-boot JAR重新启动容器而没有jar的绝对路径?相关的知识,希望对你有一定的参考价值。

请帮我解决我的问题。

随着docker的升级,将jar添加到具有绝对路径的容器不再有效。如何制作,在重新启动容器时,新罐子被拿起了?我做了一个新的jar并重新启动了容器,现在我不能这样做因为在Dockerfile中指定新jar的绝对路径是不可能的?

这是我的Dockerfile在更新到新版本的docker之前有效。从他那里我创造了一个没有任何问题的图像。

FROM java:8

VOLUME /tmp
EXPOSE 8888
ADD /home/jdev/docker-storage/jenkins/workspace/CA/build/libs/ca.jar /app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

现在我无法创建图像,因为我需要指定相对路径。重新启动后,新图像不会复制到Docker容器。 Dockerfile位于/ home / jdev中。

ADD docker-storage/jenkins/workspace/CA/build/libs/ca.jar /app.jar

谢谢您的帮助!

答案

您应该将Docker容器视为不可变容器。当您使用此方法时,您遇到的大多数问题都将消失。

这个设置最近对我有好处。不确定您是否使用Maven。这是一个基于Maven的解决方案。

首先在项目的根目录中创建一个docker目录。

将此Dockerfile添加到新目录(包括所需的任何特定配置)

FROM java:8u111-jdk-alpine

COPY *.jar target/@project.artifactId@-@project.version@.jar

CMD java -Xmx512m -jar target/@project.artifactId@-@project.version@.jar

配置Maven以使用新的docker目录和Dockerfile

将以下内容添加到pom.xml

         <resource>
            <directory>${project.basedir}/docker</directory>
            <filtering>true</filtering>
            <targetPath>..</targetPath>
        </resource>

现在当你打包你的项目时,你将在Dockerfile文件夹中有一个正确的target

以上是关于如何使用新的spring-boot JAR重新启动容器而没有jar的绝对路径?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 应用程序 - 启动时间与“mvn spring-boot:run”和“java -jar”的差异

用更大的堆空间重新启动 JVM

使用spring-boot开发,然后打包成jar,linux服务器,启动成功,端口号8081,但是访问报404错误

在 docker 容器中重新部署 spring-boot 应用程序?

使用可执行 Jar 时找不到 Spring-Boot 资源

改进 Docker 中的 Spring-Boot 启动