【问题标题】:Run jar file in docker image在 docker 镜像中运行 jar 文件
【发布时间】:2016-05-05 20:15:12
【问题描述】:

我用 java 创建了一个 Docker 映像,并将 jar 文件复制到映像中。 我的 Dockerfile 是:

FROM anapsix/alpine-java
MAINTAINER myNAME 
COPY testprj-1.0-SNAPSHOT.jar /home/testprj-1.0-SNAPSHOT.jar
RUN java -jar /home/testprj-1.0-SNAPSHOT.j

执行以下命令后:

docker build -t imageName.

在控制台中,我看到了应用程序的输出,一切都很好。 但是当我停止图像时,我不知道如何再次运行图像? 当我执行以下命令时:

docker run -i -t imageName java -jar /home/testprj-1.0-SNAPSHOT.jar

应用程序再次运行,但在我的 Dockerfile 中我已经编写了此命令。如何在没有此命令的情况下运行映像并让应用程序自动运行?

【问题讨论】:

    标签: docker dockerfile


    【解决方案1】:

    图像和容器是有区别的。

    • 图像将被构建一次
    • 您可以从图像启动容器

    在你的情况下:

    改变你的形象:

    FROM anapsix/alpine-java
    MAINTAINER myNAME 
    COPY testprj-1.0-SNAPSHOT.jar /home/testprj-1.0-SNAPSHOT.jar
    CMD ["java","-jar","/home/testprj-1.0-SNAPSHOT.jar"]
    

    建立你的形象:

    docker build -t imageName .
    

    现在在容器中调用你的程序:

    docker run --name myProgram imageName
    

    现在通过重启容器来重启你的程序:

    docker restart myProgram
    

    你的程序改变了吗?重建图像!:

    docker rmi imageName
    docker build -t imageName .
    

    【讨论】:

      【解决方案2】:

      这可能不是您所要求的,但是如果您只是需要运行一个 JAR(而不是只是更大的自定义容器的一部分),我喜欢这种映射卷的方法/folder 到 JAR 并使用标准上游映像运行它:

      docker run --rm -it -v /home/me/folderHoldingJar:/home:Z java:latest /bin/bash -c '/usr/bin/java -jar /home/theJarFile.jar'
      

      如果 JAR 需要显示 GUI,您甚至可以添加 some additional args

      【讨论】:

      • 如果我希望 application.jar 在启动容器时已经运行怎么办?是否可以创建一个启动了我的 .jar 的图像,这样我就不必在启动容器时等待它启动?例如,如果我像 java -jar app.jar 这样启动我的应用程序,则需要 20 秒才能准备好通过 localhost:8080 访问它。当我从容器中启动它时,我希望它无需等待 20 秒即可准备就绪。有可能吗?
      • 谢谢,这正是我想要的。
      猜你喜欢
      • 2022-10-15
      • 1970-01-01
      • 2017-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-03
      • 2020-01-06
      相关资源
      最近更新 更多