在docker镜像中运行jar文件

时间:2016-01-28 12:39:06

标签: docker dockerfile

我使用java创建一个docker镜像,并在图像中使用coppying 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.

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

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

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

2 个答案:

答案 0 :(得分:62)

图像和容器之间存在差异。

  • 图片将建立在ONCE
  • 您可以从图像
  • 启动容器

在你的情况下:

更改图片:

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 .

答案 1 :(得分:0)

这可能与您的要求不完全相同,但是如果您只是需要运行一个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